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
 1 /*
 2 求素数的问题,但数据范围是0 < n < 1000000这么大,
 3 很明显平时我们穷举数字,再一个个去判断是否是素数,
 4 肯定超时,这就要用到效率非常高的求素数的算法了,
 5 竞赛中一般用素数筛选法来处理此类问题,关于素数筛选法生成素数表,
 6 这个网上资料也很多,可以自己搜索学习,简单的说是用了一个思想:
 7 (素数的倍数一定是个合数)。建立一个全1的数组(下标2~N),
 8 先将下标是2的倍数的全置0,再将下标是3的倍数全置0,……,以此类推,
 9 最后剩下的,仍是1的那些下标,就肯定是素数了。
10 这样做远远比过去穷举数字快是不是??你们可以体会下。
11 */
12 #include <cstdio>
13 const int MAX=1000000;
14 int prime[MAX]={0};
15 int mark[MAX]={0};
16 
17 void init()
18 {
19     for(int i=2,n=1;i<MAX;i++)    //枚举 
20         {
21             if(prime[i]==0)        //0标志位代表是素数 
22                 {
23                     mark[i]=n++;    //记录这个素数对应的序号 
24                     for(int j=i;j<MAX;j=j+i)    //素数的倍数,肯定不是素数 
25                         {
26                             prime[j]=i;                //去掉标志位,记录最大质因数 
27                         }
28                 }
29         }
30 }
31 int main()
32 {
33     int n;
34     init();
35     while(~scanf("%d",&n))
36         {
37             printf("%d\n",mark[prime[n]]);    //prime中存放这个数的最大质因数 
38         }
39     return 0;
40 }

 

相关文章:

  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-06-22
  • 2022-12-23
  • 2021-12-13
  • 2021-04-07
  • 2022-02-03
相关资源
相似解决方案