求最小的所有素因子每位之和与原数的每位之和相等的数。
感觉上相当水的题,刚开始总wa,想不通为什么,后来发现纯素数不能是答案,改过之后有超时的情况,改了改就过了。。。
#include <iostream>
#include<cstring>
#include<cmath>
using namespace std;
const int N =1000000;
bool prime[N];
int p[N];
int k=0;
void isprime()
{
long long i,j;
memset(prime,true,sizeof(prime));
for(i=2;i<N;i++)
{
if(prime[i])
{
p[k++]=i;
for(j=i*i;j<N;j+=i)
{
prime[j]=false;
}
}
}
}
int iprime(int n)
{
if(n<1000000)
return prime[n];
for(int i=0;p[i]<=sqrt(n);i++)
{
if(n%p[i])
continue;
else
return 0;
}
return 1;
}
int ans1(int n)
{
int s=0;
s+=n%10;
while(n/=10)
{
s+=n%10;
}
return s;
}
int ans(int n)
{
int sum=0;
for(int i=0;;i++)
{
if(iprime(n))
{
sum+=ans1(n);
break;
}
while(!(n%p[i]))
{
n/=p[i];
sum+=ans1(p[i]);
}
if(n==1)
break;
}
return sum;
}
int main()
{
int n;
isprime();
while(cin>>n,n)
{
for(int i=n+1;;i++)
{
if(iprime(i))
continue;
if(ans(i)==ans1(i))
{
cout<<i<<endl;
break;
}
}
}
return 0;
}