题目1207:质因数的个数

时间限制:1 秒

内存限制:32 兆

特殊判题:

提交:7367

解决:2406

题目描述:

求正整数N(N>1)的质因数的个数。

相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。

输入:

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

输出:

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

样例输入:
120
样例输出:
5
提示:

注意:1不是N的质因数;若N为质数,N是N的质因数。

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
using namespace std;

bool mark[100001];
int prime[100001];
int primeSize;

void init()//用素数筛选法筛选出2到100000内的所有素因数
{
    primeSize=0;
    for(int i=2; i<100000; i++)
    {
        if(mark[i]==true) continue;
        prime[primeSize++]=i;
        if(i>=1000) continue;
        for(int j=i*i; j<=100000; j+=i)
        {
            mark[j]=true;
        }
    }
}
int main()
{
    init();
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        int ansPrime[30];//按顺序保存分解出的素因数
        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;//初始化幂指数为0
                while(n%prime[i]==0)//从被测试数中将该素数分解出来,并统计其幂指数
                {
                    ansNum[ansSize]++;
                    n/=prime[i];
                }
                ansSize++;//素因数个数增加
                if(n==1) break;//若已被分解成1,则分解提前终止
            }
        }
        if(n!=1)//若测试完2到100000内所有素因数,n仍未被分解到1,则剩余的因数一定是n一个大于100000的素因数
        {
            ansPrime[ansSize]=n;//记录该大素因数
            ansNum[ansSize++]=1;//其幂指数只能为1
        }
        int ans=0;
        for(int i=0; i<ansSize; i++)
        {
            ans+=ansNum[i];//统计各个素因数的幂指数
        }
        printf("%d\n",ans);
    }
    return 0;
}

/**************************************************************
    Problem: 1207
    User: zhuoyuezai
    Language: C++
    Result: Accepted
    Time:10 ms
    Memory:2008 kb
****************************************************************/

时间: 2024-10-05 20:18:06

题目1207:质因数的个数的相关文章

九度OJ 1207 质因数的个数 (筛素数,勉强AC)

1 秒 内存限制:32 兆 特殊判题:否 提交:4466 解决:1375 题目描述: 求正整数N(N>1)的质因数的个数. 相同的质因数需要重复计算.如120=2*2*2*3*5,共有5个质因数. 输入: 可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9). 输出: 对于每组数据,输出N的质因数的个数. 样例输入: 120 样例输出: 5 提示: 注意:1不是N的质因数:若N为质数,N是N的质因数. 来源: 2007年清华大学计算机研究生机试真题 若测试完2到10

1207.质因数的个数

题目描述: 求正整数N(N>1)的质因数的个数. 相同的质因数需要重复计算.如120=2*2*2*3*5,共有5个质因数. 输入: 可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9). 输出: 对于每组数据,输出N的质因数的个数. 样例输入: 120 样例输出: 5 提示: 注意:1不是N的质因数:若N为质数,N是N的质因数. #include<iostream> using namespace std; bool mark[100001]; int

九度oj 题目1207:质因数的个数

题目描述: 求正整数N(N>1)的质因数的个数. 相同的质因数需要重复计算.如120=2*2*2*3*5,共有5个质因数. 输入: 可能有多组测试数据,每组测试数据的输入是一个正整数N,(1<N<10^9). 输出: 对于每组数据,输出N的质因数的个数. 样例输入: 120 样例输出: 5 提示: 注意:1不是N的质因数:若N为质数,N是N的质因数. 这个题着实费了我一番功夫,开始一直在纠结需要去判断每一个被除数是不是质数,需要一个个的去遍历质数才能得到答案,但每一次这样判断结果必然超时

题目557-奇数的个数-nyoj20140812

#include <stdio.h>int main(){    int a[11];    while(scanf("%d%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9])!=EOF)   {        int i,num;        num=0;    for(i=0;i&l

求 质因数的个数

如何 快速求一个数的质因数的个数 for(int i = 1; i <= 1000000; i++) cnt[i] = 2; cnt[1] = 1; for(int i = 2; i <= 1000000; i++){ for(int j = i+i; j <= 1000000; j += i) cnt[j]++; } 原文地址:https://www.cnblogs.com/ccut-ry/p/8409965.html

快速求出n!的质因数的个数

一般做组合数的题目都要进行质因数的分解,我们一般是for循环对每个数进行质因数分解,大多数情况都不会超时,但极少数的情况下,题目会不允许这样的做法,所以我们需要学会一种更快的方法来求质因数. 我们一般的方法是对每个数进行质因数分解: inline void calc(int x,int val) { int xx=x; for(int i=2;i*i<=xx;i++) { while(x%i==0)//不断进行除法,找出多少的当前的质数 { c[i]+=val;x/=i; } if(x==1)b

快速求出n!质因数的个数

一般做组合数的题目都要进行质因数的分解,我们一般是for循环对每个数进行质因数分解,大多数情况都不会超时,但极少数的情况下,题目会不允许这样的做法,所以我们需要学会一种更快的方法来求质因数. 我们一般的方法是对每个数进行质因数分解: 1 inline void calc(int x) 2 { 3 int xx=x; 4 for(int i=2;i*i<=xx;i++) 5 { 6 while(x%i==0)//不断进行除法,找出多少的当前的质数 7 { 8 c[i]++;x/=i; 9 } 10

LintCode Python 简单级题目 433.岛屿的个数

题目描述: 给一个01矩阵,求不同的岛屿的个数. 0代表海,1代表岛,如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右为相邻. 您在真实的面试中是否遇到过这个题? Yes 样例 在矩阵: [ [1, 1, 0, 0, 0], [0, 1, 0, 0, 1], [0, 0, 0, 1, 1], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1] ] 中有 3 个岛. 标签 脸书 谷歌 Zenefits 题目分析: 循环2维数组,找到其值为1的元素,count++, 然后递

(南阳理工 acm)题目206 矩形的个数

矩形的个数 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 在一个3*2的矩形中,可以找到6个1*1的矩形,4个2*1的矩形3个1*2的矩形,2个2*2的矩形,2个3*1的矩形和1个3*2的矩形,总共18个矩形. 给出A,B,计算可以从中找到多少个矩形. 输入 本题有多组输入数据(<10000),你必须处理到EOF为止 输入2个整数A,B(1<=A,B<=1000) 输出 输出找到的矩形数.  样例输入 1 2 3 2 样例输出 3 18 #include&