/*题解详见公众号文章,最底扫码关注*/ #include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<string> #include<cstdlib> #include<cstdio> #include<map> #include<vector> #include<set> #include<queue> #include<stack> using namespace std; typedef long long ll; const ll mod = 1e9 + 7; const int N = 1e6 + 7; #define IO do{\ ios::sync_with_stdio(false);\ cin.tie(0);\ cout.tie(0);}while(0) #define mem(a,b) memset(a,b,sizeof(a)); map<int, int>d; int su[10005] = {1,1,0}; void isprime() { for (int i = 2; i < 10005; i++) if (!su[i]) for (int j = i*i; j < 10005; j += i) su[j] = 1; } int main() { int n, m; cin >> n >> m; int b[10005], l[10005],c=0,dd[5]; isprime(); for (int i = n; i <= m; i++) { int a = i,cc=0,flag1=0; while (a != 1) { cc++; dd[0] = a / 10000; dd[1] = a / 1000 % 10; dd[2] = a / 100 % 10; dd[3] = a / 10 % 10; dd[4] = a % 10; a = dd[0] * dd[0] + dd[1] * dd[1] + dd[2] * dd[2] + dd[3] * dd[3] + dd[4] * dd[4]; if (cc > 10) { flag1 = 1; break; } } if (!flag1) { l[c] = cc; b[c++] = i; } } for (int i = 0; i < c; i++) { int a = b[i], flag1 = 0; while (a != 1) { dd[0] = a / 10000; dd[1] = a / 1000 % 10; dd[2] = a / 100 % 10; dd[3] = a / 10 % 10; dd[4] = a % 10; a = dd[0] * dd[0] + dd[1] * dd[1] + dd[2] * dd[2] + dd[3] * dd[3] + dd[4] * dd[4]; d[a]++; } } int flag1 = 0; for (int i = 0; i < c; i++) { int a = b[i]; if (d.count(a) && (a >= n&& a <= m)) continue; else { flag1++; cout << a << " "; if (su[a]) cout << l[i] << endl; else cout << 2 * l[i] << endl; } } if (!flag1) cout << "SAD" << endl; return 0; }
第4届CCCC字符串大赛 L2-1特立独行的幸福
最新推荐文章于 2022-04-21 21:03:32 发布