POJ 1845 Sumdiv(因子和 大数模 费马小定理)
来源:互联网 发布:厦门大数据协会 编辑:程序博客网 时间:2024/05/16 08:41
POJ 1845
题目大意
给你A和B
(0≤A,B≤50000000) ,定义S为AB 的所有因子的和,让你输出Smod 9901
分析
因子的和
带有除法的取模运算可以用乘法逆元来解决,分子对幂运算取模可以用二分法取模法做。
一个优化是通过费马小定理把幂次方缩小到9901以内:
费马小定理:
这道题思路不难但涉及的知识点多:扩展欧几里得、欧拉函数、费马小定理、大数取模、同余
思路想好后就在看书上代码做了(细节问题太多)。需要注意的一个细节是:在扩展欧几里得之后需要
代码
#include<cstdio>#include<iostream>#include<cmath>#include<cstring>#include<cstdlib>#include<queue>using namespace std;const int MOD=9901;int p[50000];//保存A的因子int pnum[50000];//A的因子对应的个数int pcnt;void ExtGcd(int a,int b,int &x,int &y){ if(!b){x=1;y=0;return ;} ExtGcd(b,a%b,x,y); int t=x;x=y; y=t-(a/b)*y;}void Find_Factor(int A)//将A分解为素数幂{ memset(pnum,0,sizeof(pnum)); pcnt=0; for(int i=2;i*i<=A;i++) { if(A%i==0) { p[++pcnt]=i; while(A%i==0) { pnum[pcnt]++; A=A/i; } } } if(A>1) { p[++pcnt]=A; pnum[pcnt]=1; }}int Mul(int x,int y)//返回x^y%MOD{ x=x%MOD; if(x==0)return MOD; if(x==1)return 1; int m=1; y=y%(MOD-1);//费马小定理优化 while(y)//二进制取模 { if(y&1)m=m*x%MOD; x=x*x%MOD; y=y>>1; } return m;}void Work(int A,int B){ long long int ans=1; int x,y; for(int i=1;i<=pcnt;i++) { if(p[i]%MOD==1){ans=ans*(pnum[i]*B+1)%MOD;continue;} ans=ans*(Mul(p[i],pnum[i]*B+1)-1)%MOD; ExtGcd(p[i]-1,MOD,x,y);//x即为p[i]-1的逆(%MOD) x=(x%MOD+MOD)%MOD; ans=ans*x%MOD; } cout<<ans<<endl;}int main(){ int A,B; while(scanf("%d%d",&A,&B)!=EOF) { if(A==0){cout<<0<<endl;continue;} if(A==1 || B==0){cout<<1<<endl;continue;} Find_Factor(A); Work(A,B); }}
0 0
- POJ 1845 Sumdiv(因子和 大数模 费马小定理)
- poj-1845 Sumdiv (逆元+费马小定理+因子和)
- POJ 1845 Sumdiv (大数据因子和)
- POJ 1845 Sumdiv (因子和)
- poj 1845 Sumdiv (算术基本定理求一个数因子和)
- POJ 1845 Sumdiv (因子和)
- POJ 1845-Sumdiv【经典数学题目---求因子和】
- POJ 1845 Sumdiv 求幂级数的因子和+二分
- poj-1845 Sumdiv && nyoj - 928 小M的因子和
- POJ 1845 Sumdiv(求阶乘的因子和)
- poj 1845 Sumdiv ,质因子分解
- POJ 1845 Sumdiv 逆元 费马小定理 Trick
- POJ1845 Sumdiv 费马小定理+欧拉函数+素因子分解
- poj-1845(大数模运算)
- poj 1845 Sumdiv(二分递归求等比数列+素因子分解)
- POJ 1845-Sumdiv(快速幂取模+整数唯一分解定理+约数和公式+同余模公式)
- POJ 1845 Sumdiv (唯一分解定理+求等比数列前n项和)
- poj 1845 Sumdiv (同余定理,快速幂取余)
- POJ1797-Heavy Transportation(Dijkstra 变式& 最大生成树)
- cenos6.5安装与配置mysql
- 宽字符和窄字符的一个坑
- win7下安装Python,numpy,matplotlib,scipy,scikit-learn等机器视觉工具包
- 【BZOJ 3786】星系探索 splay维护dfs序
- POJ 1845 Sumdiv(因子和 大数模 费马小定理)
- PV、UV、IP之间的区别与联系
- .NET Core 最小化发布
- DVWA系列(二)----DVWA环境搭建
- [Boolan] C++第三周 类的关系。 复合,委托,继承
- BZOJ 1924 所驼门王的宝藏【思维建图+强连通缩点+DAG图上做最长路】这题好尼玛综合........
- centos7 安装MySQL数据库
- java零基础入门知识3.3——Swing基础知识总结(四)
- 使用Java对UTF8URL进行编码解码以及进行编码方式的判断