PAT L2-029. 特立独行的幸福
原题链接
简单
作者:
青丝蛊
,
2021-04-13 19:12:28
,
所有人可见
,
阅读 381
#include <bits/stdc++.h>
using namespace std;
set<int> se;
map<int, int> mp;
bool vis[10010];
bool check(int x)
{
if (x == 1) return 0;
for (int i = 2; i * i <= x; i++)
if (x % i == 0) return 0;
return 1;
}
bool dfs(int x)
{
if (x == 1) return true;
int t = 0;
while (x)
{
t += (x % 10) * (x % 10);
x /= 10;
}
if (se.count(t)) return false;
se.insert(t);
vis[t] = true; // 把依附x的数标记
return dfs(t);
}
int main()
{
int l, r;
cin >> l >> r;
for (int i = l; i <= r; i++)
{
se.clear();
if (!dfs(i)) continue;
mp[i] = se.size();
if (check(i)) mp[i] *= 2;
}
if (mp.empty()) puts("SAD");
else
{
for (auto c : mp)
if (!vis[c.first])
cout << c.first << ' ' << c.second << endl;
}
return 0;
}