算是暴力吧,但暴力也是有技巧的。
#include<cstdio>
#include<cmath>
#include<iostream>
using namespace std;
const int N = 1000;
int prime[1001];
bool judge(int i)
{
for(int j=2;j*j<=i;++j)
if(i%j==0)
return false;
return true;
}
void ini()
{
int num = 2,count = 0;
while(count<N)
{
if(judge(num))
prime[++count] = num;
num++;
}
}
int dig(int i)
{
int sum = 0;
while(i)
{
sum += i%10;
i /= 10;
}
return sum;
}
int convert(int j)
{
int sum = 0;
int jj = j;
for(int i=1;i<=N&&prime[i]*prime[i]<=j;++i)
if(jj%prime[i]==0)
{
int tmp = dig(prime[i]);
while(jj%prime[i]==0)
{
sum += tmp;
jj /= prime[i];
}
}
if(jj>1)
sum += dig(jj);
return sum;
}
int main(void)
{
int n;
ini();
while(scanf("%d",&n),n!=0)
{
int i;
for(i=n+1;;i++)
if(!judge(i))
{
if(dig(i)==convert(i))
break;
}
cout<<i<<endl;
}
return 0;
}
本文探讨了如何通过数学技巧和算法找到具有特定性质的数,重点在于利用判断质数和数字之和的方法来筛选符合条件的整数。
292

被折叠的 条评论
为什么被折叠?



