• 质因子分解——Prime Factors


    先上原理

    对于一个非素数来说有两种情况

    1,所有质因子小于等于sqrt(n)

    2,只存在一个大于sqrt(n)的质因子,其他质因子都小于sqrt(n)

    至于证明,可以用反证法。

    若是有多余一个大于sqrt(n)的质因子,这些因子的乘积.....

    下面上代码

    这里借助一个结构体,当然你也可以用数组

    struct factor {
        int x;//记录素因子
        int cnt;//素因子的个数
    }fac[10];

    2  3  5  7  11  13  17  19  23  29

    以上10个素数的乘积已经超过了int的表示范围

    故而结构体数组只开了10个

    int prime_num;//质因子的个数
    void prime_fac(int n)
    {
        for(int i=0;i<=sqrt(n);i++)
        {
            if(n%prime[i]==0)
            {
                fac[prime_num].x=prime[i];
                while(n%prime[i]==0)
                {
                    fac[prime_num].cnt++;
                    n=n/prime[i];
                }
                prime_num++;
            }
        }
        if(n!=1)
        {
            fac[prime_num].x=n;
            fac[prime_num].cnt=1;
            prime_num++;
        }
    }

    该函数执行结束,fac结构体数组中就是质因子的分解结果

  • 相关阅读:
    RabbitMq
    SAAS-HEM
    java框架
    数据结构
    JVM
    springboot高级
    面试题汇总
    vue
    bootforum
    SpringBoot
  • 原文地址:https://www.cnblogs.com/lxzbky/p/12507541.html
Copyright © 2020-2023  润新知