首页 > 其他 > 详细

九度OJ1207

时间:2014-03-11 15:54:49      阅读:586      评论:0      收藏:0      [点我收藏+]

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#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\n",count);
    }
    return 0;
}

  

九度OJ1207,布布扣,bubuko.com

九度OJ1207

原文:http://www.cnblogs.com/wickedpriest/p/3592719.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!