L2-029 特立独行的幸福(团体程序设计天梯赛-练习集)

link

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 100010;

int a[MAXN], num[MAXN], yifu[MAXN];
int A, B;

bool isprime(int n){
    if(n == 1) return 0;
    if(n == 2) return 1;
    for(int i = 2; i * i <= n; i++){
        if(n % i == 0) return false;
    }
    return true;
}

bool ishappy(int x){
    set<int> s;
    int tmp = x, sum1 = 0;
    while(tmp != 1){
        s.insert(tmp);
        sum1 = 0;
        while(tmp){
            sum1 += (tmp % 10) * (tmp % 10);
            tmp /= 10;
        }
        tmp = sum1;
        num[x]++;
        yifu[tmp] = 1;
        if(s.count(tmp)) return false;
    }

    return true;
}
int main(){
    scanf("%d%d", &A, &B);

    vector<int> ans;
    for(int i = A; i <= B; i++){
        if(ishappy(i)){
            ans.push_back(i);
        }
    }

    int flag = 0;
    for(int i = 0; i < (int)ans.size(); i++){
        if(isprime(ans[i])) num[ans[i]] *= 2;
        if(!yifu[ans[i]]){
            cout << ans[i] << " " << num[ans[i]] << endl;
            flag = 1;
        }
    }
    if(!flag) cout << "SAD" << endl;
    
    return 0;
}
posted @ 2025-03-07 11:01  awei040519  阅读(7)  评论(0)    收藏  举报