题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/1111914599412858886
#include <iostream>
#include <algorithm>
#include <set>
using namespace std;
int sum(int a){
int sum=0;
while(a){
int t=a%10;
a/=10;
sum+=t*t;
}
return sum;
}
int prime(int a){
int i;
for(i=2; i<a; i++){
if(a%i==0)
return 0;
}
return 1;
}
int main(){
int a[1000005];
int l,r;
set<int> ss;
cin >> l >> r;
for(int i=l;i<=r;i++){
if(a[i]!=-1){
int t=i;
while(t!=1){
t=sum(t);
a[t]=-1;
if(ss.find(t)!=ss.end()){
ss.clear();
break;
}
ss.insert(t);
}
a[i]=ss.size();
ss.clear();
}
}
int flag=1;
for(int i=l;i<=r;i++){
if(a[i]>0){
flag=0;
if(prime(i)){
cout << i << " " << a[i]*2 << "\n";
}else{
cout << i << " " << a[i] << "\n";
}
}
}
if(flag){
cout << "SAD\n";
}
return 0;
}