L2-1 特立独行的幸福-模拟+判断素数
思路:
1,各位数字做一次平方和为一次迭代,用cnt来表示迭代次数,迭代得到1结束,否则输出SAD
2,用kao[N]数组来表示依附于她的幸福数的个数,如果是素数就独立性加倍bei*cnt
3,用st[N]数组来表示迭代的过程中是否出现循环
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
typedef long long ll;
bool st[N],kao[N];
int duli[N];
bool isprime(int n)
{
if(n<2) return false;
for(int i=2;i<=n/i;i++)
if(n%i==0)
return false;
return true;
}
void solve()
{
bool f=false;
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
memset(st,false,sizeof(st));
if(kao[i]) continue;
int bei=1,cnt=0;
if(isprime(i)) bei=2;
int tp=i;
while(1)
{
int res=0;
while(tp)
{
res+=pow(tp%10,2);
tp/=10;
}
kao[res]=true;
if(st[res]) break;
st[res]=true;
cnt++;
if(res==1)
{
duli[i]=bei*cnt;
break;
}
tp=res;
}
}
for(int i=a;i<=b;i++)
if(!kao[i]&&duli[i]>0)
{
cout<<i<<' '<<duli[i]<<endl;
f=true;
}
if(!f)
cout<<"SAD"<<endl;
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
solve();
return 0;
}