2017.8.28. 欧拉函数
来源:互联网 发布:自动抢红包软件 编辑:程序博客网 时间:2024/06/13 23:44
欧拉函数
适用范围:求与一个或者连续几个数互质的数的个数,也可以反过来求与其不互质的书的个数。
PS:信欧拉,得永生。
PS:第二段的代码我还没调好各位先别用。
std.cpp(求单个数)
#include<iostream>#include<cstdio>#include<cstdlib>#include<cmath>#include<iomanip>#include<algorithm>#include<string>#include<cstring>#include<queue>using namespace std;//求所有与该数互质的数的个数 int getphi(int n){ int m=sqrt(n+0.5); int ans=n; for(int i=2;i<=m;i++) if(n%i==0) { ans = ans/i*(i-1); while(n%i==0) n/=i; } if(n>1)ans=ans/n*(n-1); return ans;}int main(){ int n; cin >> n; cout << getphi(n) << endl;}
std.cpp(求1~n)
#include<iostream>#include<cstdio>#include<cstdlib>#include<cmath>#include<iomanip>#include<algorithm>#include<string>#include<cstring>#include<queue>using namespace std;//求所有与该数互质的数的个数 int tot=0,phi[10000007],prime[10000007];bool check[10000007];void euler(int n){ memset(check,false,sizeof check); phi[1] = 1; for(int i=2;i<=n;i++) { if(!check[i]) { prime[tot++] = i; phi[i] = i-1; } for(int j=0;j<tot;j++) { if(i*phi[i]>n) break; check[i*phi[i]] = 1; if(i%prime[j]==0) { phi[i*prime[j]] = phi[i]*prime[j]; break; } else phi[i*prime[j]] = phi[i]*(prime[j]-1); } } }int main(){ int n; cin >> n; euler(n); for(int i=1;i<=n;i++)cout<<phi[i]<<endl;}
阅读全文
0 0
- 2017.8.28. 欧拉函数
- 欧拉函数
- 欧拉函数
- Relatives 【欧拉函数】
- 欧拉函数
- POJ_2407_欧拉函数
- 欧拉函数
- hdu_3501_欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数
- 欧拉函数应用
- 欧拉函数
- 欧拉函数
- 欧拉函数
- iOS定位详解
- windows环境 -phpstudy安装redis扩展
- Spring事务学习笔记(一)
- springMVC笔记
- 翻转单词顺序列
- 2017.8.28. 欧拉函数
- js 的作用域 域解析 分析
- 种花 (贪心+(堆 or 线段树))
- LintCode-----11.二叉查找树中搜索区间
- POJ-1091:[NOIP模拟](二)T2-跳蚤
- HttpServletRequest
- 电机矢量控制
- 使用Material design仿JD顶部搜索
- Universal 2nd Factor (U2F) 概述(4)-特定的公私秘钥对