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

  1. //互质与欧拉函数
  2.  
  3. /*
  4. 求欧拉函数
  5. 按欧拉函数计算公式,只要分解质因数即可
  6. */
  7. int phi(int n){
  8. int ans=n;
  9. for(int i=;i<=sqrt(n);i++){
  10. if(n%i==){
  11. ans=ans/i*(i-);
  12. while(n%i==) n/=i;
  13. }
  14. }
  15. if(n>) ans=ans/n*(n-);
  16. return ans;
  17. }

性质: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)即可

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. using namespace std;
  5. int phi[];
  6. void euler(int n){//用era筛的思路O(nlogn)复杂度
  7. for(int i=;i<=n;i++)phi[i]=i;
  8. for(int i=;i<=n;i++)
  9. if(phi[i]==i)//i是质数
  10. for(int j=;i*j<=n;j++)
  11. phi[i*j]=phi[i*j]/i*(i-);
  12. }
  13. int main(){
  14. int t,n;
  15. euler();
  16. scanf("%d",&t);
  17. for(int tt=;tt<=t;tt++){
  18. scanf("%d",&n);
  19. int ans=;
  20. for(int i=;i<=n;i++)
  21. ans+=*phi[i];
  22. printf("%d %d %d\n",tt,n,ans+);
  23. }
  24. }

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

  1. #include<iostream>
  2. #include<cstring>
  3. #include<cstdio>
  4. using namespace std;
  5. int phi[];
  6. int m,v[],prime[];
  7. void euler(int n){//用era筛的思路O(nlogn)复杂度
  8. memset(v,,sizeof v);
  9. m=;
  10. for(int i=;i<=n;i++){
  11. if(v[i]==){//i是质数
  12. v[i]=i,prime[++m]=i;
  13. phi[i]=i-;
  14. }
  15. for(int j=;j<=m;j++){
  16. if(prime[j]>v[i] || prime[j]*i>n) break;
  17. v[i*prime[j]]=prime[j];
  18. phi[i*prime[j]]=phi[i]*(i%prime[j]?prime[j]-://φ(n)=φ(n/p)*(p-1) 性质4
  19. prime[j]);//φ(n)=φ(n/p)*p 性质3
  20. }
  21. }
  22. }
  23. int main(){
  24. int t,n;
  25. euler();
  26. scanf("%d",&t);
  27. for(int tt=;tt<=t;tt++){
  28. scanf("%d",&n);
  29. int ans=;
  30. for(int i=;i<=n;i++)
  31. ans+=*phi[i];
  32. printf("%d %d %d\n",tt,n,ans+);
  33. }
  34. }

欧拉函数,打表求欧拉函数poj3090的更多相关文章

  1. UVA 11426 GCD - Extreme (II)(欧拉函数打表 + 规律)

    Given the value of N, you will have to find the value of G. The definition of G is given below:Here ...

  2. LightOJ - 1370 Bi-shoe and Phi-shoe (欧拉函数打表)

    题意:给N个数,求对每个数ai都满足最小的phi[x]>=ai的x之和. 分析:先预处理出每个数的欧拉函数值phi[x].对于每个数ai对应的最小x值,既可以二分逼近求出,也可以预处理打表求. ...

  3. POJ 2478 欧拉函数打表的运用

    http://poj.org/problem?id=2478 此题只是用简单的欧拉函数求每一个数的互质数的值会超时,因为要求很多数据的欧拉函数值,所以选用欧拉函数打表法. PS:因为最后得到的结果会很 ...

  4. 【poj2478-Farey Sequence】递推求欧拉函数-欧拉函数的几个性质和推论

    http://poj.org/problem?id=2478 题意:给定一个数x,求<=x的数的欧拉函数值的和.(x<=10^6) 题解:数据范围比较大,像poj1248一样的做法是不可行 ...

  5. hdu 2814 快速求欧拉函数

    /** 大意: 求[a,b] 之间 phi(a) + phi(a+1)...+ phi(b): 思路: 快速求欧拉函数 **/ #include <iostream> #include & ...

  6. A - Bi-shoe and Phi-shoe (欧拉函数打表)

    Description Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi-shoe is a ver ...

  7. hdu 2824 The Euler function 欧拉函数打表

    The Euler function Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. HDU 1286 找新朋友 (欧拉phi函数打表)

    题意:你懂得. 析:一看这个题应该是欧拉phi函数,也就说欧拉phi函数是指求从 1 到 n 中与 n 互素的数的个数,这个题很明显是这个意思嘛,不多说了. 代码如下: #include <io ...

  9. 杭电多校第十场 hdu6434 Count 欧拉函数打表 快速打表模板

    Problem I. Count Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Other ...

随机推荐

  1. python---一个简单的socket

    server端: 1 创建socket对象.调用socket构造函数.如: socket = socket.socket( family, type )      #family参数代表地址家族,可为 ...

  2. Linux上安装Perl模块的两种方法

    Linux/Unix下安装Perl模块有两种方法:手工安装和自动安装.第一种方法是从CPAN上下载  您需要的模块,手工编译.安装.第二种方法是联上internet,使用一个叫做CPAN的模块自动完 ...

  3. Kruskal算法:最小生成树

    //Kruskal算法按照边的权值从小到大查看一遍,如果不产生圈(重边等也算在内),就把当前这条表加入到生成树中. //如果判断是否产生圈.假设现在要把连接顶点u和顶点v的边e加入生成树中.如果加入之 ...

  4. jmeter使用正则表达式匹配多个中的响应结果

    一.背景: 同一个正则表达式匹配多个响应结果值,之前都是添加多个正则表达式,一个一个去获取需要的值,比较麻烦:今天尝试了一下用一个正则表达式获取响应中所有需要的值,使用这种方式也能够获取多个结果中指定 ...

  5. 从零开始搭建Salt Web之初探salt-api

    Salt-API入门 在Google搜索栏输入salt-api,会有一些讲述如何使用Salt-API的文章,确实有效,不过都是建立 在将Salt安装在默认目录下的情况下,即通过apt-get inst ...

  6. C# CEF 封装UserControl

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Drawing; u ...

  7. 调用write()写

    一.在POSIX中的定义 #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); 二.返回值 ( ...

  8. nginx 全局配置

    nginx 全局配置 #user nobody; # user 主模块 ,指定nginx worker 进程的运行用户组 worker_processes ; # worker_processes 开 ...

  9. NOI2018场外游记

    鬼晓得APIO以后我经历了些什么 Day 0 好像没什么要记的 Day 1 下午去参加开幕式 神tm大型落地柜装风扇空调下放冰块 开幕式,,,hot chocolate是真的hot(强制在线?卡常?) ...

  10. rem,em

    任意浏览器的默认字体高都是16px.所有未经调整的浏览器都符合: 1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的body选择 ...