Problem Description

Sample Input

2

Sample Output

2

Hint

1. For N = 2, S(1) = S(2) = 1.

2. The input file consists of multiple test cases.
解题思路:由于指数很大,要用到欧拉降幂公式,即扩展欧拉定理:$ a^n \equiv a^{n \; mod \;\varphi(p)} (mod \; p)$,其中$gcd(a, p) = 1$。题目的意思就是给出一个N,N∈[1,10^100000],求(S1+S2+...+SN)mod(10^9+7),其中Si表示i个数相加总和为N组成的方案数,那么原问题就可以转换成N=x1+x2+x3+...+xN,其中xi看作是由m个1(m∈[0,N])相加得到的,则SN就有N个1(xi=1(i∈[1,N]))相加得到,所以也就是求N个1分组的方案数(小球隔板问题)。将N个1排成一行,有N-1个空,每个空可以选择插入或者不插入一块隔板,则一共有2^(N-1)种方案数。由于N很大,直接套整数快速幂模板肯定是不行的,又因为10^9+7是一个质数,因此是否可以通过费马小定理来实现对指数N-1先取个模,然后再套一下整数快速幂取模运算?我们来推导一下公式:根据费马小定理公式:a(p-1)≡1(mod p),其中p是质数,p不能整除a。假设n=n%(p-1)+t*(p-1),其中t=n/(p-1),则2n%p=2n%(p-1)%p*(2t)(p-1)%p,由于gcd(2t,p)=1,即(2t)(p-1)≡1(mod p),所以最终推得的公式为2n%p=2n%(p-1)%p。用字符串读取N,同时取模p-1,因为(N-1)%(p-1)=N%(p-1)-1,所以将N模p-1得到的结果N'再计算一下2(N'-1)%p即可。
AC代码:
 #include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL mod=1e9+;
const int maxn=1e5+;//N最大有10^5位
char str[maxn];
LL mod_power(LL a,LL b){//整数快速幂
LL ans=;
while(b){
if(b&)ans=ans*a%mod;
a=a*a%mod;
b>>=;
}
return ans;
}
int main(){
while(cin>>str){
LL N=;
for(int i=;str[i]!='\0';++i)
N=(*N+(str[i]-''))%(mod-);//先处理N'=N%(p-1)
cout<<mod_power(,N-)<<endl;//再求2^(N'-1)%p即可
}
return ;
}

题解报告:hdu 4704 Sum(扩展欧拉定理)的更多相关文章

  1. HDU 4704 Sum (高精度+快速幂+费马小定理+二项式定理)

    Sum Time Limit:1000MS     Memory Limit:131072KB     64bit IO Format:%I64d & %I64u Submit Status  ...

  2. hdu 4704 Sum【组合数学/费马小定理/大数取模】By cellur925

    首先,我们珂以抽象出S函数的模型:把n拆成k个正整数,有多少种方案? 答案是C(n-1,k-1). 然后发现我们要求的是一段连续的函数值,仔细思考,并根据组合数的性质,我们珂以发现实际上答案就是在让求 ...

  3. 数论 --- 费马小定理 + 快速幂 HDU 4704 Sum

    Sum Problem's Link:   http://acm.hdu.edu.cn/showproblem.php?pid=4704 Mean: 给定一个大整数N,求1到N中每个数的因式分解个数的 ...

  4. HDU 4704 Sum(隔板原理+组合数求和公式+费马小定理+快速幂)

    题目传送:http://acm.hdu.edu.cn/showproblem.php?pid=4704 Problem Description   Sample Input 2 Sample Outp ...

  5. hdu 4704 Sum (整数和分解+快速幂+费马小定理降幂)

    题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7).其中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3.                  ...

  6. HDU 4704 Sum (隔板原理 + 费马小定理)

    Sum Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 131072/131072K (Java/Other) Total Submiss ...

  7. HDOJ 4704 Sum 规律 欧拉定理

    规律 欧拉定理: 找规律 2^n-1 ,n 非常大用欧拉定理 Sum Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/13 ...

  8. hdu 4704 Sum (整数和分解+高速幂+费马小定理降幂)

    题意: 给n(1<n<),求(s1+s2+s3+...+sn)mod(1e9+7). 当中si表示n由i个数相加而成的种数,如n=4,则s1=1,s2=3.                 ...

  9. hdu 4704 Sum(组合,费马小定理,快速幂)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4704: 这个题很刁是不是,一点都不6,为什么数据范围要开这么大,把我吓哭了,我kao......说笑的, ...

随机推荐

  1. CEF3研究(一)

    一.基本概览 C++ WrapperC++Wrapper(包装类)就是将C结构包装C++类. 这是C/C++API转换层通过translator tool自动产生的. 进程     CEF3用多进程运 ...

  2. libsvm源码凝视+算法描写叙述:svm_train

    (I will try my best to make this note clearer. We mainly focus on solve_c_svc in this note) We mainl ...

  3. react-document-title

    根据不同的路由改变文档的title 使用该组件: import ReactDocumentTitle from 'path/ReactDocumentTitle' render() { return ...

  4. DRF的认证,频率,权限

    1,DRF的认证 初识认证:浏览器是无状态的,一次导致每次发的请求都是新的请求,所以每次请求,服务器都会进行校验,这样就很繁琐,这趟我们就需要给每一个用户登录后一个新的标识,浏览器每次都会带着这个唯一 ...

  5. iOS开发——高级篇——多线程GCD死锁

    面试题 请问以下代码打印结果: - (void)interview01 { // 以下代码是在主线程执行的 NSLog(@"执行任务1"); dispatch_queue_t qu ...

  6. eclispe pydev tab改回 空格找到方法了,这个链接:http://stackoverflow.com/questions/23570925/eclipse-indents-new-line-with-tabs-instead-of-spaces

    看这个链接: 3down votefavorite 1 I've followed all the suggestions here. When I press return, I get a new ...

  7. struts2 Action获取表单数据

    1.通过属性驱动式 1.首先设置 表单中的数据的name值 如:<input type="text" name="username" value=&quo ...

  8. (1)数据库和MySql初步认识

    一,数据的保存: 数据可以通过很多方式进行保存,不用的保存方式对于所保存的数据的影响各有不同. 1,数据保存在内存中:读写速度很快:但是随着程序的关闭数据会丢失,而且内存容量相对小,价格昂贵 2,数据 ...

  9. ubuntu mysql5.7源码安装

    本系列的lnmp的大框架基本上是按照http://www.linuxzen.com/lnmphuan-jing-da-jian-wan-quan-shou-ce-si-lnmpda-jian-yuan ...

  10. POSTMAN模拟数组数据

    有时候写接口,需要传入数据数据.比如购物车中的一组商品.它们的数量是不固定的,只能用数组才能更好的处理. 怎么用POSTMAN模拟呢? 万能的POSTMAN.