hdu 4704 Sum(费马小定理)解题报告
2015-08-01 17:26
441 查看
Problem Description
Sample Input
Sample Output
费马小定理是数论四大定理之一,其他三个也需要知道。
分析:题目要求s1+s2+s3+...+sn;//si表示n划分i个数的n的划分的个数,如n=4,则s1=1,s2=3
假设An=s1+s2+s3+...+sn;
对于n可以先划分第一个数为n,n-1,n-2,...,1,则容易得出An=A0+A1+A2+A3+...+A(n-1);
=>A(n+1)=A0+A1+A2+A3+...+An =>An=2^(n-1);
所以,得到公式An=2^(n-1)后,就很方便了
由于n非常大,所以这里要用到费马小定理:a^(p-1)%p == 1%p == 1;
//2^n%m == ( 2^(n%(m-1))*2^(n/(m-1)*(m-1)) )%m == (2^(n%(m-1)))%m * ((2^k)^(m-1))%m == (2^(n%(m-1)))%m
//2^n%m = (2^(n%(m-1)))%m
所以,代码如下:
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.
费马小定理是数论四大定理之一,其他三个也需要知道。
分析:题目要求s1+s2+s3+...+sn;//si表示n划分i个数的n的划分的个数,如n=4,则s1=1,s2=3
假设An=s1+s2+s3+...+sn;
对于n可以先划分第一个数为n,n-1,n-2,...,1,则容易得出An=A0+A1+A2+A3+...+A(n-1);
=>A(n+1)=A0+A1+A2+A3+...+An =>An=2^(n-1);
所以,得到公式An=2^(n-1)后,就很方便了
由于n非常大,所以这里要用到费马小定理:a^(p-1)%p == 1%p == 1;
//2^n%m == ( 2^(n%(m-1))*2^(n/(m-1)*(m-1)) )%m == (2^(n%(m-1)))%m * ((2^k)^(m-1))%m == (2^(n%(m-1)))%m
//2^n%m = (2^(n%(m-1)))%m
所以,代码如下:
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define INF 99999999 #define ll long long using namespace std; const int MAX=100000+10; const int mod=1000000000+7; char s[MAX]; ll FastPow(ll a,ll k){ ll sum=1; while(k){ if(k&1)sum=sum*a%mod; a=a*a%mod; k>>=1; } return sum; } int main(){ while(scanf("%s",s)!=EOF){ ll sum=0; for(int i=0;s[i] != '\0';i++){ sum=(sum*10+s[i]-'0')%(mod-1); } ll n=sum-1; printf("%I64d\n",FastPow(2,n)); } return 0; }
相关文章推荐
- 集群通信组件tribes之通道拦截器
- What is an entity system framework for game development?
- CS281: Advanced Machine Learning 第二节 Generative model
- hdoj 1276 士兵队列训练问题
- epoll +++
- 支持向量机:Outliers
- 欢迎使用CSDN-markdown编辑器
- C#之Action和Func的用法
- SDUT2015暑假集训14级周赛1 E - 尤文图斯(NP-博弈)
- Ubuntu之Gitlab安装
- vs2010 问题 >LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- hdu_1087_Super Jumping! Jumping! Jumping!
- 保护眼睛的颜色和各种背景颜色设置方法(转)
- Python正则表达式指南
- Android设计模式系列--原型模式
- Android设计模式系列-适配器模式
- 判断一个字符串是否是另一个字符串的子串(Implement strStr() )
- codeforces 435B Pasha Maximizes
- 基本组件
- 【Cocos2d入门教程八】浅析Cocoss2d下的多点触控