hdu 4704 sum(费马小定理+快速幂)
题意:
这题意看了很久。。
s(k)表示的是把n分成k个正整数的和,有多少种分法。
例如:
n=4时,
s(1)=1 4
s(2)=3 1,3 3,1 2,2
s(3)=3 1,1,2 1,2,1 2,1,1
s(4)=1 1,1,1,1
s(1)+s(2)+s(3)+s(4)=1+3+3+1=8
当n=1,2,3,4时,可以分别求出结果为 1,2,4,8
于是推出答案就是2^(n-1)---------------------(为什么?我也不知道,这个是怎么推出来的)
思路:题意明白了,就是求2^(n-1) mod(10^9+7)呗。
由于这里的n非常大,1<=n<10^100000,这里用简单的暴力绝对超时啊(10^8就会超时)
那么,这里用了两个优化,一个是费马小定理 a^(p-1)≡1(mod p),另外就是快速幂加速求幂
这里稍微演示一下如何利用费马小定理处理:
(单单用费马小定理处理仍会超时,因为处理完后,指数最大能达到10^9级别,仍会超时)
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int mod=1e9+7; void pow(__int64 b){//快速求幂(位操作)
__int64 a=2;
__int64 ans;
ans=1;
while(b>0){
if(b&1)//判断是否为奇数,相当于 if(b%2==1)
ans=(ans*a)%mod;
a=(a*a)%mod;
b=b>>1;//二进制向右移一位,相当于 b=b/2;
}
printf("%I64d\n",ans);
} int main(){
char str[123456];
__int64 num,i;
while(~scanf("%s",str)){
num=0;
int len=strlen(str);
for(i=0;i<len;i++){
num=( num*10+(str[i]-'0') )% (mod-1);//精华部分
}
if(num==0) pow(mod-2);//此时n=mod-1,所以应该求pow(mod-2),而不能求成pow(num-1)
else pow(num-1);
}
return 0;
}
hdu 4704 sum(费马小定理+快速幂)的更多相关文章
- hdu 4704 Sum 费马小定理
题目链接 求2^n%mod的值, n<=10^100000. 费马小定理 如果a, p 互质, 那么a^(p-1) = 1(mod p) 然后可以推出来a^k % p = a^(k%(p-1) ...
- 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum
Sum Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...
- HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)
题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description Sample Input 2 Sample Outp ...
- HDU 4704 Sum( 费马小定理 + 快速幂 )
链接:传送门 题意:求 N 的拆分数 思路: 吐嘈:求一个数 N 的拆分方案数,但是这个拆分方案十分 cd ,例如:4 = 4 , 4 = 1 + 3 , 4 = 3 + 1 , 4 = 2 + 2 ...
- hdu 4704(费马小定理+快速幂取模)
Sum Time Limit: 2000/ ...
- 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...
- hdu_4869(费马小定理+快速幂)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4869 Turn the pokers Time Limit: 2000/1000 MS (Java/O ...
- BZOJ_[HNOI2008]_Cards_(置换+Burnside引理+乘法逆元+费马小定理+快速幂)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1004 共n个卡片,染成r,b,g三种颜色,每种颜色的个数有规定.给出一些置换,可以由置换得到的 ...
- hdu4549(费马小定理 + 快速幂)
M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n ...
随机推荐
- java将一个或者多个空格进行分割
public static void main(String[] args) { String s = "GET /index.html HTTP/1.1";//字符串s由“GET ...
- sql join相关
JOIN: 如果表中有至少一个匹配,则返回行 LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行,返回左表所有行 RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行,返回右表 ...
- Smart Battery Specification Revision 1.1
1.SBS Specifications 2.System Management Bus (SMBus) Specification
- 基于JQuery实现表单元素值的回写
form.jsp: <%@ page language="java" import="java.util.*" pageEncoding="GB ...
- 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释
代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...
- 底部TabsFooter
Demo简单描述:点击底部菜单可切换页面,并且底部为共用. 这个是在设置好导航Navigator之后进行的步骤,只是我个人进行Tab切换的一种思路方法,或许不是最好的,仅供参考一下. 首先我们需要一个 ...
- 五个知识体系之-SQL语句大全
一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备 ...
- Ajax的跨域问题
•跨域问题概述 •出于安全考虑,浏览器不允许ajax跨域获取数据 •可以通过script的src加载js的方式传递数据 fn({"a":"1","b& ...
- ES通过API调整设置
1.查询es的设置信息 2.查询单个索引的设置 3.设置复制集为0
- 使用jQuery Ajax功能的时候需要注意的一个问题
每次jquery的Ajax请求都会创建一个xmlHttprequest对象,理论上讲,长连接(页面需要和服务器保持长连接,而且在连接超时后需要重新请求连接)的请求是一个无限递归,请求数量是非常大的,但 ...