版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TengWan_Alunl/article/details/83279642
水题。
#include<bits/stdc++.h>
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define per(i,r,l) for(int i=(r);i>=(l);i--)
#define random(l,r) ((l)+rand()%((r)-(l)+1))
using namespace std;
typedef unsigned long long ull;
typedef long long ll;
const int inf=1e9+10,N=1e6+100;
inline int read(){
register int sign=0,v=0; register char c;
while(!isdigit(c=getchar())) if(c=='-') break;
if(c=='-') sign=1; else v=c-48;
while(isdigit(c=getchar())) v=v*10+c-48;
if(sign==0) return v; else return -v;
}
int n,v[N],prime[N],len;
void Euler(){
rep(i,2,N){
if(v[i]==0){
prime[++len]=i;
v[i]=i;
}
rep(j,1,len){
if((prime[j]>v[i])||(prime[j]*i>N)) break;
v[i*prime[j]]=prime[j];
}
}
}
int main(){
Euler();
while(n=read()){
rep(i,1,len) if(v[n-prime[i]]==n-prime[i]){
printf("%d = %d + %d\n",n,prime[i],n-prime[i]);
break;
}
}
return 0;
}