团体程序设计天梯赛
L2-029 特立独行的幸福
使用一个数组tldx
标记数字是否是特立独行的数,数组元素默认为true
。
维护一个依赖集合dependSet
,用于存储某一迭代元素及依附于它的数。
函数iterates()
用于迭代判断,所有迭代出的数都将依附于某一个数,所以tldx
数组对应值标记为false
,如果存在重复元素,则将iterates()
根元素的tldx
数组对应值标记为false
,否则在tlNumDeg
数组中存储该数字的独立性。
输出时判断是否是素数,是则独立性加倍。
#include <bits/stdc++.h>
using namespace std;
vector<bool> tldx(10010, true);
set<int> dependSet;
vector<int> tlNumDeg(10010);
int singleIterate(int a){
int sum = 0, temp;
while(a != 0){
temp = a % 10;
sum += pow(temp, 2);
a = a / 10;
}
return sum;
}
bool iterates(int a){
int t = 0;
t = singleIterate(a);
tldx[t] = false;
if(t == 1) return true;
if(dependSet.find(t) != dependSet.end()) return false;
dependSet.insert(t);
return iterates(t);
}
bool judgePrime(int a){
bool flag = 1;
for(int i = 2; i <= sqrt(a); i++)
if(a % i == 0){
flag = 0;
break;
}
return flag;
}
int main(){
int a, b;
cin >> a >> b;
for(int i = a; i <= b; i++){
dependSet.clear();
dependSet.insert(i);
if(iterates(i) == false) tldx[i] = false;
else tlNumDeg[i] = dependSet.size();
}
bool flag = false;
for(int i = a; i <= b; i++){
if(tldx[i] == true){
flag = true;
if(judgePrime(i) == true) cout << i << ' ' << 2 * tlNumDeg[i] << endl;
else cout << i << ' ' << tlNumDeg[i] << endl;
}
}
if(!flag) cout << "SAD" << endl;
return 0;
}