Smith数的判断

摘要:
输入多组数据,并判断输入的数字是否为史密斯数字。如果“是”,则输出“否”。解决方案:将输入数设置为n,首先计算n的位的和,这非常简单。不要重复计算输入数的素因子的问题。这里需要注意的一点是素因子的重复。有关该想法的详细信息,请参见代码。求出每个质量因数的总和。)确定所有数字的总和是否等于素数的所有数字的和。

题目描述:

  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数的判断》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇依赖注入的本质与里氏替换原则Spring中单例和多例模式下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

Vue实现左侧可伸缩

导出默认值{name:‘Home’,data(){return{openStatus:true,open_close:true,}},方法:{change()}this.openStatus=!this.openStatusif(this.open状态){setTimeout(()=˃{this.open_close=true},1000)}else{set...

解决Windows 10每次重启默认浏览器都被重置为IE的一个办法

我的Windows10电脑每次设置默认浏览器重启后都会被重置为IE,这是个令人抓狂的问题。现在大部分浏览器都不支持IE浏览器了,如果每次点击外链都自动通过IE打开,则需要额外的操作手动拷贝粘贴到火狐打开,会影响工作效率。在网上找了各种各样的解决办法都不灵……再设置一次默认浏览器如下图所示,设置好了之后重启电脑试一下吧,祝你好运!...

为服务中网关的作用

“API网关”核心组件是架构用于满足此些需求。API网关定位为应用系统服务接口的网关,区别于网络技术的网关,但是原理则是一样。API网关统一服务入口,可方便实现对平台众多服务接口进行管控,对访问服务的身份认证、防报文重放与防数据篡改、功能调用的业务鉴权、响应数据的脱敏、流量与并发控制,甚至基于API调用的计量或者计费等等。...

基于 WebRTC 的 RTSP 视频实时预览

该方案采用基于WebRTC的视频即时消息,其原生支持RTP协议的解码,因此延迟可以非常低,约为0.2-0.4秒。其他方案的延迟大于1秒。WebRTC需要浏览器。您可以在以下地址查看支持的浏览器。WebRTC实现基于web的视频会议。标准是WHATWG协议。其目的是通过浏览器提供简单的javascript来实现实时通信功能。Github中有很多WebRTC的实...

USBWriter之后恢复磁盘大小

USBWriter之后恢复磁盘大小的方法:1,cmd2,diskpart3,listdisk4,selectdisk*5,clean6、在我的电脑点右键,管理,然后选磁盘管理,选择USB后,右键,然后再新建卷就可以了。...

微信小程序生成带参数的二维码(小程序码)独家asp.net的服务端c#完整代码

1) 我第一次使用wx。小程序端请求调用API,发现这是一个坑!@-_~Page:'pages/index/index',//在此处填写要跳转到的小程序页面。你不能在它前面添加/oh。发布后必须为1024页//小程序代码的边长,以像素为单位,范围[2801280]},标头:{'content-type':“application/json;charset=U...