#include <iostream>
#include <bits/stdc++.h>
using namespace std;
bool prime[100000];
int ans[100000],m=0;
long long divded(long long a)
{
long long temp=a;
long long sum=0;
while(temp)
{
sum+=temp%10;
temp/=10;
}
return sum;
}
void is_prime()
{
memset(prime,1,sizeof(prime));
prime[0]=prime[1]=0;
for(int i=2; i<10000; i++)
{
if(prime[i])
ans[m++]=i;
for(int j=i*i; j<10000; j+=i)
prime[j]=0;
}
}
bool isprime(long long x)
{
int y=sqrt(x);
for(int i=0; i<m&&ans[m]<=y; i++)
if(x%ans[i]==0)
return false;
return true;
}
int main()
{
long long sum1,sum2=0,n;
bool flag=0;
is_prime();
cin>>n;
sum1=divded(n);
for(int i=0; i<m;)
{
if(n%ans[i]==0)
{
n/=ans[i];
sum2+=divded(ans[i]);
if(isprime(n)||n==1)
{
flag=1;
break;
}
if(flag)
break;
}
else
i++;
if(flag)
break;
}
if(n!=1)
sum2+=divded(n);
if(sum1==sum2)
cout <<1<< endl;
else
cout <<0<< endl;
return 0;
}
B - Identify Smith Numbers-SDUT 算法训练赛
最新推荐文章于 2024-11-25 12:27:48 发布
本文介绍了一个用于识别Smith数的算法实现。通过预先计算质数并使用这些质数来分解输入的整数,进而判断该整数是否为Smith数。文章详细展示了如何计算一个数的各位数字之和,并通过质因数分解比较原数与质因数的数字和是否相等。
3736

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



