
这道题最大的坑点居然是pow返回的是浮点型…一开始用pow怎样都不通过
用visit来记录幸福数,1为特立独行的幸福数,-1为不特立独行的幸福数
#include <iostream>
#include <set>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int visit[10010];//特立独行幸福数为1,不特立独行幸福数为-1
int num[10010];//独立数
int squsum(int t){
int sum=0;
while(t){
sum +=(t%10)*(t%10);//用pow错了
t=t/10;
}
return sum;
}
bool isprime(int t){
for(int i=2;i<=sqrt(t);i++){
if(t%i==0)
return false;
}
return true;
}
int main(){
int begin,end;
cin>>begin>>end;
set<int>s;
for(int i=begin;i<=end;i++){
int t=i;
if(visit[t]==-1) continue;
while(true){
t=squsum(t);
if(t==1){
visit[i]=1;
for(auto it=s.begin();it!=s.end();it++)
visit[*it]=-1;
num[i]=s.size()+1;//包括自己
s.clear();
break;
}
if(s.find(t)!=s.end()){
s.clear();
break;
}
s.insert(t);
}
}
int cnt=0;
for(int i=begin;i<=end;i++){
if(visit[i]==1){
if(isprime(i)) num[i] *=2;
cout<<i<<" "<<num[i]<<endl;
cnt++;
}
}
if(cnt==0) cout<<"SAD";
return 0;
}

本文探讨了如何使用C++编程语言识别特立独行的幸福数和质数。通过定义特立独行的幸福数为经过特定操作最终能够归结为1的数,并且在过程中不重复出现中间结果,文章提供了详细的算法实现。此外,还介绍了判断质数的方法,并展示了如何将这些概念应用于给定范围内的数字,最后输出特立独行的幸福数及其相关计数,以及质数的倍数情况。


被折叠的 条评论
为什么被折叠?



