竟然把条件大于n看成了大于等于n,WA无数
#include <iostream>
#include <cmath>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn=12000;
bool isP[maxn];
vector<int> p;
int n;
void init(){
for(int i=2;i<maxn;++i){
isP[i]=1;
}
for(int i=0;i<maxn;++i){
if(isP[i]){
p.push_back(i);
for(int j=i+i;j<maxn;j+=i){
isP[j]=0;
}
}
}
}
int main(){
init();
while(scanf("%d",&n)&&n){
for(n+=1;;n++){
int sumN=0,t=n,sumPF=0;
while(t){
sumN+=t%10;
t/=10;
}
t=n;
for(int i=0;p[i]*p[i]<=t;++i){
while(t%p[i]==0){
int tt=p[i],tsum=0;
while(tt){
tsum+=tt%10;
tt/=10;
}
t/=p[i];
sumPF+=tsum;
}
}
if(t>1&&sumPF){
int tsum=0;
while(t){
tsum+=t%10;
t/=10;
}
sumPF+=tsum;
}
if(sumN==sumPF)break;
}
printf("%d\n",n);
}
return 0;
}
本文介绍了一个寻找特定整数的算法,该整数及其素因子的数字之和与其各位数字之和相等。通过筛法预处理所有小于12000的素数,并使用循环不断检查每个整数直至找到符合条件的数。
136

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



