L2-029 特立独行的幸福
题目链接
题意

思路
- 先将数不断分解,利用vector容器存放幸福数和对应独立性
2.将[a,b]范围内的数字依次遍历循环,如果一个数进入循环中还出现相同的数字说明就是死循环,不为幸福数 - 如果一个数是幸福数后面又出现依附于他的数,那这个数字不用输出
坑点
- 依附于其他数字同时也在范围内则不需要输出
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int fn[N]={0};
bool sushu(int x)
{
if(x<=1)
{
return false;
}
for(int i=2;i*i<=x;i++)
{
if(x%i==0)
{
return false;
}
}
return true;
}
int check(int x)
{
int sum=0;
while(x)
{
sum+=(x%10)*(x%10);
x/=10;
}
return sum;
}
vector<int>v;
vector<int>vg;
int main()
{
int a,b;
cin>>a>>b;
for(int i=a;i<=b;i++)
{
int x=i;
int sum=0;
int f[N]={0};
while(1)
{
x=check(x);
sum++;
if(x==1)
{
if(sushu(i))
{
sum*=2;
}
v.push_back(i);
vg.push_back(sum);
break;
}
if(f[x]==1)
{
break;
}
f[x]=1;
fn[x]=1;
}
}
if(v.size()==0)
{
cout<<"SAD"<<endl;
}
else{
for(int i=0;i<v.size();i++)
{
if(fn[v[i]]==0)
{
cout<<v[i]<<" "<<vg[i]<<endl;
}
}
}
return 0;
}