#include<cstdio>
#define MAX 1000000
int phi[MAX+10],pri[MAX+10],cnt=0;
bool f[MAX+10];
void getphi()//欧拉筛筛素数和phi值
{
phi[1]=1;
for(int i=2;i<=MAX;i++)
{
if(!f[i]) {
pri[++cnt]=i;
phi[i]=i-1;
}
for(int j=1;j<=cnt&&i*pri[j]<=MAX;j++)
{
f[i*pri[j]]=1;
if(i%pri[j]==0){
phi[i*pri[j]]=phi[i]*pri[j];
break;
}
else phi[i*pri[j]]=phi[i]*(pri[j]-1);
}
}
}
void solve(int n)//判断是否符合题意
{
int m;
for(int i=2;i<=cnt;i++)
{
m=n-pri[i];
if(phi[m]==m-1) {
printf("%d = %d + %d\n",n,pri[i],m);
break;
}
}
}
int main()
{
char ch;
int num,cnt=1;
getphi();
while((ch=getchar())<'0'||ch>'9');//消非可用字符
while(ch!=48)
{
num=ch^48;
while((ch=getchar())>='0'&&ch<='9') num=10*num+(ch^48);//快读
solve(num);
cnt++;
while((ch=getchar())<'0'||ch>'9');
}
return 0;
}
回头写欧拉筛,巨简单,欧拉函数算是完结了,今日份学习



京公网安备 11010502036488号