zoukankan      html  css  js  c++  java
  • 质因数的个数

    题目描述:
    求正整数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<algorithm>
    using namespace std;
     
    bool mark[100001];
    int prime[100000];
    int size=0;
    void init(){
    for (int i=2;i<100000;i++)
    mark[i]=false;
    for (int i=2;i<100000;i++){//输入数据是10^9,这里用100000以下的素数做分解是因为n的大于sqrt(n)的因子只能有一个
    if (mark[i])
    continue;
    prime[size++]=i;
    if (i>=1000) continue;//没加这句程序就崩溃了,应该是因为i>1000,那么j就越界了,当输入的数字很大时,一定要注意有没有平方运算会让数字越界
    for (int j=i*i;j<100000;j+=i){
    mark[j]=true;
    }
    }
    }
     
    int main (){
    int n;
    int ans[30];
    int as;
    int anscnt[30];
    init();
    while (cin>>n){
    as=0;
    for (int i=0;i<size;i++){
    if (n%prime[i] == 0){
    ans[as]=prime[i];
    anscnt[as]=0;
     
    while(n%prime[i] == 0){
    anscnt[as]++;
    n /= prime[i];
    }
     
    as++;
    if (n==1)
    break;
    }
     
    }
     
    if (n!=1){
    ans[as]=n;
    anscnt[as++]=1;
    }//注意这里,还要判断n是否被分解完全了,n若不是一,那么剩余的因数一定是n,大于100000的素因数
    int answerc=0;
    for (int i=0;i<as;i++){
    answerc+=anscnt[i];
    }
    cout<<answerc<<endl;
    }
    return 0;
    }
  • 相关阅读:
    python 3字符编码
    python 数据类型 datatype
    部署python django程序
    linux centos7安装python3
    关于mysql数据库优化
    关于bottle WEB框架中签名cookie的一点理解
    1111
    bottle框架剖析
    the difference __str__ and __repr__
    property getitem setitem
  • 原文地址:https://www.cnblogs.com/yexiaoqi/p/7225665.html
Copyright © 2011-2022 走看看