欧拉函数模板(判断,筛选)

来源:互联网 发布:人体尺寸数据 编辑:程序博客网 时间:2024/05/22 00:40
1136 欧拉函数
基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
 收藏
 关注
对正整数n,欧拉函数是少于或等于n的数中与n互质的数的数目。此函数以其首名研究者欧拉命名,它又称为Euler's totient function、φ函数、欧拉商数等。例如:φ(8) = 4(Phi(8) = 4),因为1,3,5,7均和8互质。
Input
输入一个数N。(2 <= N <= 10^9)
Output
输出Phi(n)。
Input示例
8
Output示例
4
#include<bits/stdc++.h>using namespace std;typedef long long LL;const int N =1000011;int Euler[N];int euler(int n){    int res=n;    for(int i=2;i*i<=n;i++)    {        if(n==1)break;        if(n%i==0) res=res/i*(i-1);        while(n%i==0) n/=i;    }    if(n!=1)        res=res/n*(n-1);    return res;}void Init(){    for(int i=1;i<=1000000;i++)        Euler[i]=i;    for(int i=2;i<=1000000;i++)        if(Euler[i]==i)        for(int j=i;j<=1000000;j+=i)           Euler[j]=Euler[j]/i*(i-1);    return ;}int main(){    int n;    Init();    scanf("%d",&n);    if(n<=1000000)        printf("%d\n",Euler[n]);    else printf("%d\n",euler(n));    return 0;}

原创粉丝点击