n的每位之和为sum,其分解质因子的每位和为sum1,当sum==sum1时输出n 素数不符合条件
进行因式分解即可,先打出素数表。
#include <stdio.h>
#include <math.h>
#include <string.h>
long prime[50000],primenum;
bool isprime(long n)
{
if(n==1)
return false;
for(long i=0;i<primenum&&prime[i]*prime[i]<=n;i++)
if(n%prime[i]==0)
return false;
return true;
}
void getprime()
{
prime[0]=2;
prime[1]=3;
primenum=2;
for(long i=5;i<=100000;i++)
if(isprime(i))
prime[primenum++]=i;
}
long get(long n)
{
long sum=0;
while(n)
{
sum+=n%10;
n/=10;
}
return sum;
}
bool judge(long n)
{
if(isprime(n))
return false;
long sum=0;
sum=get(n);
long sum1=0;
for(long i=0;i<primenum;i++)
{
if(prime[i]>sqrt(n)+1)
break;
if(n%prime[i]==0)
{
while(n%prime[i]==0)
{
n/=prime[i];
sum1+=get(prime[i]);
}
}
}
if(n>1)
sum1+=get(n);
if(sum==sum1)
return true;
else
return false;
}
int main()
{
long n;
getprime();
while(scanf("%ld",&n)!=EOF&&n)
{
n++;
while(!judge(n))
n++;
printf("%ld\n",n);
}
return 0;
}