版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/leekerian/article/details/88929418
#include <iostream>
#include <map>
#include <vector>
#include <cstring>
using namespace std;
vector<int> vt;
map<int,int> mp;
int vis[11111];
int vis1[11111];
int cont1;
vector<int> tt;
bool judge(int x)
{
tt.clear();
int num=x;
while(num!=1)
{
int k=num;
int num1=0;
while(k!=0)
{
int num2=k%10;
k/=10;
num1+=num2*num2;
}
num=num1;
if(vis[num])
return false;
else
{
vis[num]=1;
tt.push_back(num);
cont1++;
}
}
for(int i=0;i<tt.size();i++)
{
vis1[tt[i]]=1;
}
return true;
}
bool judge2(int x)
{
if(x==1)
return false;
if(x==2)
return true;
for(int i=2;i*i<=x;i++)
if(x%i==0)
return false;
return true;
}
int main()
{
int n,m;
cin>>n>>m;
int fg=0;
for(int i=n;i<=m;i++)
{
cont1=0;
memset(vis,0,sizeof(vis));
if(judge(i))
{
fg=1;
vt.push_back(i);
if(judge2(i)){
mp[i]=cont1*2;
}
else mp[i]=cont1;
}
}
for(int i=0;i<vt.size();i++)
{
if(!vis1[vt[i]])
printf("%d %d\n",vt[i],mp[vt[i]]);
}
if(!fg) printf("SAD\n");
return 0;
}