zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Chat Icon
    docker 容器无root 权限,如何获得docker容器里面的root权限
    yolo训练自己的数据
    jetson nano(1-1) 系统烧录和备份
    jetson nano(2)软件环境开发
    jetson nano(1-2)配置VNC
    坐标映射(remap重映射)
    opencv图像格式
    matlab相机标定导出xml文件
    jupyter安装和链接aconda
  • 原文地址:https://www.cnblogs.com/syq816/p/12555849.html
Copyright © 2011-2022 走看看