数学之欧拉函数 &几道poj欧拉题

欧拉函数总结+证明

欧拉函数总结2


POJ 1284 原根

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;

int Euler(int n)
{
    int res=n;
    for(int i=2;i*i<=n;i++)
    {
        while(n%i==0)
        {
            n/=i; res-=(res/i);
            while(n%i==0)
                n/=i;
        }
    }
    if(n>1)
       res-=(res/n);
    return res;
}

int main()
{
    int p;
    while(~scanf("%d",&p))
        printf("%d
",Euler(p-1));
    return 0;
}


POJ 2478  欧拉打表(不打表会TLE)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
#define N 1000000

int e[N+5];
void init()
{
    int i,j;
    memset(e,0,sizeof(e));
    for(i=2;i<=N;i++)
    {
        if(!e[i])
        {
            for(j=i;j<=N;j+=i)
            {
                if(!e[j])
                    e[j]=j;
                e[j]=e[j]/i*(i-1);
            }
        }
    }
}

int main()
{
    int n;
    init();
    while(scanf("%d",&n)&&n)
    {
        ll res=0;
        for(int i=2;i<=n;i++)
            res+=e[i];
        printf("%I64d
",res);
    }
    return 0;
}


谜之POJ 3358

看不懂题目,看不懂别人的解题报告。。。好像很厉害的详解

原文地址:https://www.cnblogs.com/atmacmer/p/5285831.html