zoukankan      html  css  js  c++  java
  • 九度OJ1207

    题目给你了一个很大的n,然后让你去计算它的质因数。对N进行开方得到的是一个大约在32000左右的数,我们可以用埃氏筛法进行素数打表。对所有prime[i]<=sqrt(n),分别看prime[i]能否整除n,若能整除就用n/=prime[i]然后继续寻找即可。值得注意的是,当我们搜寻完素数表中的所有元素后,如果n>1,说明除完诸多质因数后n已经成为了一个大于sqrt(n)的质数(这样的数在n的质因数乘法公式中不可能有两个),此时再将之前的计数加1即可。

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <math.h>
    #define N 31623
    int n,top=0;
    int prime[N];
    char ifprime[N]={0};
    int main()
    {
        int i,j;
        memset(ifprime,1,sizeof(ifprime));
        for(i=2;i<=N-1;i++)
        if(ifprime[i]==1)
        {
            prime[top++]=i;
            for(j=i*i;j<=N-1;j+=i)
              ifprime[i]=0;
        }
        while(scanf("%d",&n)!=EOF)
        {
            int count=0;
            double d=sqrt(n);
            int dn=d;
            for(i=0;prime[i]<=dn;i++)
            {
                while(n%prime[i]==0)
                {
                    n=n/prime[i];
                    count++;
                    if(n==1)
                    break;
                }
            }
            if(n!=1)
            count++;
            printf("%d
    ",count);
        }
        return 0;
    }
    

      

  • 相关阅读:
    汉诺塔问题
    Java中的int类型取值范围
    unsigned 类型
    CharBuffer
    铺地砖问题(递归)
    汉诺塔简略
    Long类型的构造方法被遗弃,代替的是valueOf
    坏掉的项链
    挤牛奶
    修理牛棚
  • 原文地址:https://www.cnblogs.com/wickedpriest/p/3592719.html
Copyright © 2011-2022 走看看