欧拉函数φ(x): 表示小于等于x的与x互为质因子的个数;
φ(x)=x(1-1/p(1))(1-1/p(2))(1-1/p(3))(1-1/p(4))……(1-1/p(n)) 其中p(1),p(2)…p(n)为x
的所有质数因数;x是正整数; φ(1)=1(唯一和1互质的数,且小于等于1)。注意:每种质数因数只有一个。
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <vector>
#define ll long long
using namespace std;
const int N=1e5+55;
int oula[N];
int f_oula(int n) //对于单一的数;
{
int ret=n;
for(int i=2;i*i<=n;++i){
if(n%i==0){
ret=ret/i*(i-1);
while(n%i==0)
n/=i;
}
}
if(n>1){
ret=ret/n*(n-1); //有可能存在质数因子大于sqrt(n);
}
return ret;
}
void excel() //线性筛;
{
for(int i=1;i<N;++i){
oula[i]=i;
}
for(int i=2;i<N;++i){
if(oula[i]==i){
for(int j=i;j<N;j+=i){
oula[j]=oula[j]/i*(i-1);
}
}
}
}
int main()
{
int n;
excel();
while(scanf("%d",&n)!=EOF&&n){
int k=f_oula(n);
if(k==oula[n])
printf("YES\n");
else
printf("NO\n");
}
return 0;
}