#include <bits/stdc++.h>
using namespace std;
int diedai(int x){//计算平方累加和
int d = 0;
while(x){
d+= (x%10)*(x%10);
x/=10;
}
return d;
}
int num[10010];
bool isprime(int x){ //判断素数
if(x==1) return false;
for(int i=2;i*i<=x;i++)
if(x%i==0) return false;
return true;
}
int main(){
int a, b;
cin>>a>>b;
for(int i=a;i<=b;i++){
//如果这个数出现过或者不可能是幸福数就退出,以免后续更新,因为是从前往后检查数据,可能会出现
//后面某个数依附于前面某个数,但是检查后面某个数的时候就会忽略这个条件,就是说如果后面某个数
//依附于前面某个数,它就肯定不是独立的,
if(num[i]==-2||num[i]==-1) continue;
//计算依附的个数
int cnt = 0;
int x = i;
//检查是否可能是幸福数
while(x!=1&&num[x]!=-1){
num[x]=-1;
x = diedai(x);
}
//它是幸福数,统计依附该值的个数
if(x==1){
x=i;
while(x!=1){
x = diedai(x);
num[x]=-2;
cnt++;
}
num[i]=cnt;
}
}
int judge = 0;
for(int i=a;i<=b;i++){
if(num[i]!=-2&&num[i]!=-1){
isprime(i)?cout<<i<<' '<<2*num[i]<<endl:cout<<i<<' '<<num[i]<<endl;
judge = 1;
}
}
if(!judge) cout<<"SAD"<<endl;
}
L2-1 特立独行的幸福 (25 分)
最新推荐文章于 2023-04-19 22:16:56 发布