杭电OJ 2136. Largest prime factor

题目描述:

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的最大质因子的位次为例,筛选过程详见以下表格:

求14的最大质因子的位次
 1234567891011121314151617...
第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个质数。

 

实现(C++):

#include <iostream>
#include <cstdio>
using namespace std;

#define MAXSIZE 1000001
int LPF[MAXSIZE]={0}; 

int main(){
    //素数筛选法 
    LPF[1]=0;
    int position=0;
    for(int i=2; i<MAXSIZE; i++){
        if(!LPF[i]){
        ++position;
        for(int j=i; j<MAXSIZE; j+=i)  
            LPF[j]=position;
		} 
    }
        
    int n;
    while(scanf("%d",&n)!=EOF){ //cout会超时 
        printf("%d\n",LPF[n]);
    } 
}

 

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值