欧拉函数求法(N)

Posted mch5201314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了欧拉函数求法(N)相关的知识,希望对你有一定的参考价值。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e7+5;
int p[N],oa[N];
bool vis[N];

int oula(int n)

    memset(vis,0,sizeof(vis));
    oa[1]=1;
    int cnt=1;
    for(int i=2;i<=n;i++)
    
        if(!vis[i]) 
        
            p[cnt++]=i;
            oa[i]=i-1;
        
        for(int j=1;j<cnt&&p[j]*i<=n;j++)
        
            vis[i*p[j]] = 1;
            if(i%p[j]==0) 
                oa[i*p[j]]=oa[i]*p[j];//该合数的所有质因子p[j]出现了两次以上 
                break;//若prime[j]在这个合数里出现了不止一次(i%prime[j]=0),
                //也就是这个合数的所有质因子都在i里出现过 
            
            oa[i*p[j]]=oa[i]*(p[j]-1);
        
    
    return cnt-1;
  
 
 int main()
 
    int n;
    while(cin>>n)
    
        int al=oula(n);
        for(int i=1;i<=al;i++)
        cout<<p[i]<<" \n"[i==al];
        for(int i=1;i<=n;i++)
        cout<<oa[i]<<" \n"[i==n];
     
    return 0;
 

以上是关于欧拉函数求法(N)的主要内容,如果未能解决你的问题,请参考以下文章

POJ 2478 欧拉函数(欧拉筛法) HDU 1576 逆元求法

UVA - 11426 GCD - Extreme (II) (欧拉函数)

数论笔记-同余

1的欧拉函数是多少

54的欧拉函数

欧拉函数5等于多少