欧拉函数 φ(n) 定义:[1,N]中与N互质的数的个数

//互质与欧拉函数

/*
求欧拉函数
按欧拉函数计算公式,只要分解质因数即可
*/
int phi(int n){
int ans=n;
for(int i=;i<=sqrt(n);i++){
if(n%i==){
ans=ans/i*(i-);
while(n%i==) n/=i;
}
}
if(n>) ans=ans/n*(n-);
return ans;
}

性质:1.[1,n]中与n互质的数的和为 n*φ(n)/2;

   2.欧拉函数是积性函数

     3.p|n && p*p|n =>φ(n)=φ(n/p)*p;

     4.p|n && p*p不能整除n,则φ(n)=φ(n/p)*(p-1);

     5.sum{φ(d)}=n,d是n的约数

打表求欧拉函数

第一种是era筛的思路,O(nlogn)的复杂度,即每个质数p的倍数都乘以(1-1/p)即可

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int phi[];
void euler(int n){//用era筛的思路O(nlogn)复杂度
for(int i=;i<=n;i++)phi[i]=i;
for(int i=;i<=n;i++)
if(phi[i]==i)//i是质数
for(int j=;i*j<=n;j++)
phi[i*j]=phi[i*j]/i*(i-);
}
int main(){
int t,n;
euler();
scanf("%d",&t);
for(int tt=;tt<=t;tt++){
scanf("%d",&n);
int ans=;
for(int i=;i<=n;i++)
ans+=*phi[i];
printf("%d %d %d\n",tt,n,ans+);
}
}

第二种是线性筛的思路:复杂度O(n)

#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
int phi[];
int m,v[],prime[];
void euler(int n){//用era筛的思路O(nlogn)复杂度
memset(v,,sizeof v);
m=;
for(int i=;i<=n;i++){
if(v[i]==){//i是质数
v[i]=i,prime[++m]=i;
phi[i]=i-;
}
for(int j=;j<=m;j++){
if(prime[j]>v[i] || prime[j]*i>n) break;
v[i*prime[j]]=prime[j];
phi[i*prime[j]]=phi[i]*(i%prime[j]?prime[j]-://φ(n)=φ(n/p)*(p-1) 性质4
prime[j]);//φ(n)=φ(n/p)*p 性质3
}
}
}
int main(){
int t,n;
euler();
scanf("%d",&t);
for(int tt=;tt<=t;tt++){
scanf("%d",&n);
int ans=;
for(int i=;i<=n;i++)
ans+=*phi[i];
printf("%d %d %d\n",tt,n,ans+);
}
}

最新文章

  1. word2010中怎样快速修改同级标题格式
  2. mysql数据库本地化操作
  3. 推荐一个网站——聚合了微软的文件的Knowledge Base下载地址
  4. silentScroll() 滚屏
  5. windows下Eclipse安装Perl插件教程
  6. Spring+Struts集成(第二种方案)
  7. 用C写一个web服务器(二) I/O多路复用之epoll
  8. [UIKit学习]08.关于自定义控件
  9. CUDA与OpenGL互操作
  10. STAThread 和 MTAThread
  11. python模块:网络协议和支持
  12. ASP.NET Core 借助 K8S 玩转容器编排
  13. 微信小程序性能优化之一
  14. ecplise导入项目报错而文件不报错
  15. quartz 使用问题,小坑
  16. Edifact 95B报文解读
  17. Linux与Windows远程互访(使用Rdesktop与SSH)
  18. struts2中ognl标签具体解释
  19. Android View.MeasureSpec
  20. [MVC] 自定义ActionSelector,根据参数选择Action

热门文章

  1. Hadoop生态圈-使用Ganglia监控flume中间件
  2. MYCAT分库分表
  3. sql server复制数据到excel格式变成字符串
  4. C++面试集锦( 面试被问到的问题 )
  5. 淘宝开源编辑器Kissy Editor和简易留言编辑器【转】
  6. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
  7. 服务器上的XML
  8. 用ajax传递json,返回前台的中文乱码问题
  9. [转]NOI_Linux Arbiter使用手册
  10. 下拉框combobox用法&amp;级联餐单