zoukankan      html  css  js  c++  java
  • 质因数的个数(王道)

    题目描述:

    求正整数N(N>1)的质因数的个数。 
    相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。

    输入:

    可能有多组测试数据,每组测试数据的输入是一个正整数N,(1< N< 10^9)。

    输出:

    对于每组数据,输出N的质因数的个数。

    样例输入:

    120
    

    样例输出:

    5
    #include <iostream>
    #include<cstdio>
    #include<algorithm>
    #include<string.h>
    using namespace std;
    
    bool mark[100001];//标记数字是否为素数,如果为true,则为非素数
    int prime[100001];//保存筛得的素数
    int primesize;//保存素数个数
    
    void init(){
        primesize = 0;
        memset(mark,false,sizeof(mark));
        for(int i=2;i<=10000;i++){//遍历所有数字
            if(mark[i] == true)//如果已经被标记,则跳过
                continue;
            prime[primesize++] = i;//否则又得到一个新的素数
            for(int j=i*i;j<=10000;j += i)//将该数的所有倍数均标记成非素数
                mark[j] = true;
        }
    }
    
    int main()
    {
        init();
        int n;
        scanf("%d",&n);
        int ansPrime[30];//存放被分解出的素因数
        memset(ansPrime,0,sizeof(ansPrime));
        int ansSize=0;//分解出的素因数的个数
        int ansNum[30];//每个素因数对应的幂指数
        for(int i=0;i<primesize;i++){//依次测试每一个素数
            if(n%prime[i] == 0){//该素数能整除被分解数
                ansPrime[ansSize] = prime[i];//该素数为素因数
                ansNum[ansSize] = 0;//初始化幂指数
                while(n%prime[i] == 0){//从被测试数中将该素数分解出来,并统计其幂指数
                    ansNum[ansSize]++;
                    n /= prime[i];
                }
                ansSize++;//素因数个数增加
                if(n == 1)//若已经被分解成1,则分解提前终止
                    break;
            }
        }
        if(n != 1){//剩下了一个比100000还大的素因数
            ansPrime[ansSize] = n;//记录该大素因数
            ansNum[ansSize++] = 1;//其幂指数只能为1
        }
        int ans = 0;
        for(int i=0;i<ansSize;i++)
            ans += ansNum[i];//统计各个素因数的幂指数
        printf("%d",ans);
        return 0;
    }

    总结:

    学会遍历筛选素数。这其中有个部分,j=i*i为开始,是因为i*k(k<i)必在求得k的某个素因数的时候就已经被标记过了,所以可以直接从i的平方开始算

     
  • 相关阅读:
    SpringKafka——消息监听
    RabbitMQ(八)线程池消费
    RabbitMQ(七)延迟队列
    window计划任务 0x1
    获取网页URL地址及参数等的两种方法(js和C#)
    HttpWebRequest的偶尔请求超时问题
    用HTML、CSS、JS制作圆形进度条(无动画效果)
    批量关联update
    仅仅 IE8 有效的 CSS hack 写法
    SqlServer关闭与启用标识(自增长)列
  • 原文地址:https://www.cnblogs.com/xym4869/p/8571835.html
Copyright © 2011-2022 走看看