您的位置:首页 > 编程语言 > C语言/C++

hdu2136 Largest prime factor(C语言)

2017-08-01 17:00 316 查看
Problem Description

Everybody knows any number can be combined by the prime number.

Now, your task is telling me what position of the largest prime factor.

The position of prime 2 is 1, prime 3 is 2, and prime 5 is 3, etc.

Specially, LPF(1) = 0.

 

Input

Each line will contain one integer n(0 < n < 1000000).

 

Output

Output the LPF(n).

 

Sample Input

1
2
3
4
5

 

Sample Output

0
1
2
1
3

 

Author

Wiskey

 

Source

HDU 2007-11 Programming Contest_WarmUp

C语言AC代码

#include<stdio.h>
#include<string.h>
int a[1000005];
void getprimers()
{
memset(a,0,sizeof(a));
a[1]=0;
int i,j,s;
s=1;
for(i=2; i<1000000; i++)
{
if(a[i]==0)
{
for(j=i; j<1000000; j=j+i)
{
a[j]=s;
}
s++;
}
}
}
int main()
{
{
int n;
getprimers();
while(scanf("%d",&n)!=EOF)
printf("%d\n",a
);
}
return 0;
}


筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。(另一种解释是当时的数写在纸草上,每要划去一个数,就把这个数挖去,寻求质数的工作完毕后,这许多小洞就像一个筛子。)

先解释一下筛选法的步骤:

<1> 先将1挖掉(因为1不是素数)。

<2> 用2去除它后面的各个数,把能被2整除的数挖掉,即把2的倍数挖掉。

<3> 用3去除它后面的各数,把3的倍数挖掉。

<4> 分别用5…各数作为除数去除这些数以后的各数。

上述操作需要一个很大的容器去装载所有数的集合,只要满足上述条件,即2的倍数大于1的全部置0,3的倍数大于1的全部置0,4的倍数大于1的全部置。一直到这个数据集合的末尾,这样一来不为0的数就是素数了,然后按下标在里面进行查找就好。

必须附一个神的链接:http://blog.csdn.net/morewindows/article/details/7347459
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: