0
点赞
收藏
分享

微信扫一扫

Smith数的判断

题目描述:

  smith数是指满足下列条件的可分解的整数:

  其所有位数上的数字和等于其全部素数因子的数字之和。

  例如,9975是smith数,9975=3*5*5*7*19,即9975的数字和=因子的数字总和=30.

  补充说明一下:根据smith数的定义,素数不是smith数。
输入多组数据,判断输入的数是否为smith数,如果是输出Yes,否则输出No

 

解题思路:设输入的数为n

(1)首先求出n的各个位之和,这个很简单,不再赘述

(2)求输入数的质数因子(既能整除n,又是质数),这里需要注意的一点就是质因子的重复问题,思路详见在代码。

(3)求出质因子的各位数之和。(注意!质因子也是求各位之和哦!)

(4)判断各位数之和和质因子各位数之和是否相等。

 

#include<iostream>
#include<algorithm>

using namespace std;

/*判断一个数是否为素数*/
bool isPrime(int n) {
if (n <= 3) {
return n > 1;
}
// 求平方根,注意sqrt()的参数为 double 类型,这里要强制转换m的类型
int k = (int)sqrt((double)n);
int i;
for (i = 2; i <= k; i++) {
if (n % i == 0) {
return false;
}
}
// 如果完成所有循环,那么m为素数
return true;
}

/*求个位数之和*/
int sumgewei(int num) {
int sumg = 0;//各位之和
while (num) {
sumg += num % 10;//计算每一位的和
num = num / 10;
}
return sumg;
}

int main() {
int n;
while (scanf_s("%d", &n)) {
if (isPrime(n)) {
//素数不是smith数
printf("No");
}
else {
int sumg = sumgewei(n);//各位之和n
int sump = 0;//质因子之和
for (int i = 2; i <= n;) {
if ((n%i == 0) && isPrime(i)) {
sump += sumgewei(i);
n = n / i;
}
else {
// 因为要对找出以一个质因子后得到的除数在找质因子,而且还是要从i = 2开始
// i++;放在这里既解决了上述问题,也对上述除数提供了循环
i++;
}
}
if (sumg == sump) {
printf("Yes");
}
else {
printf("No");
}
}
}

system("pause");
return 0;
}

 

唯有热爱方能抵御岁月漫长。



举报

相关推荐

smith_waterman算法的python实现

查询所有薪水高于“SMITH”的员工

判断数的奇偶性

OpenFOAM 判断求解的维数

判断完数python

01:判断数正负

【笔记】判断回文数

1039:判断数正负

0 条评论