码迷,mamicode.com
首页 > 其他好文 > 详细

欧拉函数求法(N)

时间:2019-08-03 21:45:05      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:int   typedef   欧拉   namespace   names   using   ace   std   name   

#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)

标签:int   typedef   欧拉   namespace   names   using   ace   std   name   

原文地址:https://www.cnblogs.com/mch5201314/p/11296255.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!