L2-029 特立独行的幸福

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/leekerian/article/details/88929418