题目描述:

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数的判断的更多相关文章

  1. 产生大于N的Smith数

    实验三  求Smith数 实验目的: 通过本次实验,掌握穷举算法的基本思想. 实验环境: 硬件:PC机 软件:windows操作系统,C语言 实验内容: 若一个合数的质因数分解式逐位相加之和等于其本身 ...

  2. c语言统计字符数(判断a-z哪个字符出现次数最多)

    http://poj.grids.cn/practice/2742 描述判断一个由a-z这26个字符组成的字符串中哪个字符出现的次数最多输入第1行是测试数据的组数n,每组测试数据占1行,是一个由a-z ...

  3. JS实现奇偶数的判断

    <html xmlns="http://www.w3.org/1999/xhtml" > <head> <title>标题页-学无忧(www.x ...

  4. python学习笔记3-函数,判断负小数

    一.函数 def hello(file_name,content): #形参file_name content f=open(file_name,'a+') f.seek(0) f.write(con ...

  5. 【Java】 奇偶数的判断

    判断方法(奇数): 错误判断方法:通过a%2==1来判断.(原因:负奇数对2取余的结果为-1) 正确判断方法:(1) 通过a%2!=0来判断.                          (2) ...

  6. shell脚本,计算输入给定的数,判断最大值,最小值,总和?

    [root@localhost ~]# cat five.sh #!/bin/bash #任意输入5个数,判断最大值,最小值,总和 s= read -p "please input:&quo ...

  7. 9. Palindrome Number 回文数的判断

    [抄题]: Determine whether an integer is a palindrome. An integer is a palindrome when it reads the sam ...

  8. 从键盘输入数,输出它们的平方值&判断是不是2的阶次方数

    1.从键盘输入两个整数,然后输出它们的平方值和立方值 在Java中,没有像C语言那样有一个专供接受键盘输入值的scanf函数,所以一般的做法是从键盘输入一行字符,保存到字符串s中,再将字符组成的字符串 ...

  9. js回文数的四种判断方法

    目录 1. 字符串的转换 1.1 简单点,使用高阶函数来完成 1.2 从后往前循环字符串数组 1.3 以中间数为节点,判断左右两边首尾是否相等 2. 数字转换 2.1 求模得尾数,除10得整数 判断一 ...

随机推荐

  1. 流程控制、if、elif、else,whilie、break、continue的使用

    今日内容 流程控制理论 if判断 while循环 流程控制概念 流程控制就是控制事物的执行流程 执行流程的分类 顺序结构 从上往下依次执行,代码运行流程图如下 分支结构 根据某些条件判断做出不同的运行 ...

  2. foreach 改变集合时不能使用

    使用foreach循环遍历list集合时,出现Collection was modified; enumeration operation may not execute.这个错误,查了半天才发现是当 ...

  3. 分布式 PostgreSQL 集群(Citus)官方示例 - 多租户应用程序实战

    如果您正在构建软件即服务 (SaaS) 应用程序,您可能已经在数据模型中内置了租赁的概念. 通常,大多数信息与租户/客户/帐户相关,并且数据库表捕获这种自然关系. 对于 SaaS 应用程序,每个租户的 ...

  4. 安全学习笔记-web安全之XSS攻击

    web安全之XSS攻击 XSS 即跨站脚本攻击,是 OWASP TOP10 之一.它的全称为 Cross-site scripting,因为 CSS 这个简称已经被占用表示为前端三剑客之一的CSS,所 ...

  5. 全面解析UNIX缓冲区溢出 深度防御体系

    首先简要回顾一下缓冲区溢出的攻击大系: ◆栈溢出(stack smashing) 未检查输入缓冲区长度,导致数组越界,覆盖栈中局部变量空间之上的栈桢指针%ebp以及函数返回地址retaddr,当函数返 ...

  6. Redis安装以及常见问题

    安装 下载 redis官网地址:https://redis.io/ centos安装 创建软件放置目录mkdir soft 进入soft目录并下载redis安装包. cd soft wget http ...

  7. JavaWeb 02_servlet基础

    1. servlet是什么?作用? 1) Servlet 是Sun公司制定的一套技术标准,包含与Web应用相关的一系列接口,是Web应用实现方式的宏观解决方案I而具体的Servlet容器负责提供标准的 ...

  8. Tomcat乱码问题解决

    修改idea编码:setting->Editor->File Encodings: Global Encoding:UTF-8 Project Encoding:UTF-8 Default ...

  9. ctf之POST

    题目信息如下 可知该题考察post请求知识 直接将what=flag以post传参格式进行传参即可获得flag

  10. OpenCores注册步骤和成功提交

    一  OpenCores 网站简介,这个是全世界最大的FPGA开源IP核网站.由于最近在学习USB2.0host control IP,所以想去网上下载相关的IP例程学习.通过搜索发现,有两个网站十分 ...