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
题目大意是,给定一个正整数,求出其最大质因子是从2开始的第几个质数。
在解决问题之前,先介绍一下什么是素数筛选法。筛选法又称筛法,具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。因为希腊人是把数写在涂腊的板上,每要划去一个数,就在上面记以小点,寻求质数的工作完毕后,这许多小点就像一个筛子,所以就把埃拉托斯特尼的方法叫做“埃拉托斯特尼筛”,简称“筛法”。
该题目可以用素数筛选法的思想来解决。以求14的最大质因子的位次为例,筛选过程详见以下表格:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | ... | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
第1轮 | 2(1) | 2(1) | 2(1) | 2(1) | 2(1) | 2(1) | 2(1) | 2(1) | ||||||||||
第2轮 | 3(2) | 3(2) | 3(2) | 3(2) | 3(2) | |||||||||||||
第3轮 | 5(3) | 5(3) | 5(3) | |||||||||||||||
第4轮 | 7(4) |
|
7(4) | |||||||||||||||
第5轮 | 11(5) | |||||||||||||||||
第6轮 | 13(6) | |||||||||||||||||
第7轮 | 17(7) | |||||||||||||||||
... |
a(i)表示a是从2开始的第i个质数
从表格中可以看出,经过7轮筛选,就可以确定14的质因子只有2和7,而最大的质因子7是从2开始的第4个质数。
#include
#include
using namespace std;
#define MAXSIZE 1000001
int LPF[MAXSIZE]={0};
int main(){
//素数筛选法
LPF[1]=0;
int position=0;
for(int i=2; i