一、题面

UVA - 1644 ——素数筛法

 

二、题面

根据题目的要求容易想到素数筛法最适合求解

什么是素数筛法?

首先,2是公认最小的质数,所以,先把所有2的倍数去掉;然后剩下的那些大于2的数里面,最小的是3,所以3也是质数;然后把所有3的倍数都去掉,剩下的那些大于3的数里面,最小的是5,所以5也是质数。

这一过程不断重复,就可以把某个范围内的合数全都除去(就像被筛子筛掉一样),剩下的就是质数了。维基百科上有一张很形象的动画,能直观地体现出筛法的工作过程。

UVA - 1644 ——素数筛法

 

三、实现代码

#include <iostream>

using namespace std;

int main(){
    int n,i,tmp,j,tmp2;
    bool prime[1299710];
    for(i=0;i<1299710;i++)
        prime[i]=true;
    for(i=0;i<2;i++)
        prime[i]=false;
    i=2;
    while(i<1299710){
        tmp=2;
        j=i*tmp;
        while(j<1299710){
            prime[j]=false;
            tmp++;
            j=i*tmp;
        }
        i++;
        for(;i<1299710;i++)
            if(prime[i]==true) break;
    }
    while(cin>>n){
        if(n==0) break;
        if(prime[n]==true) cout<<0<<endl;
        else{
            tmp=n;
            tmp2=n;
            while(prime[tmp]==false)
                tmp--;
            while(prime[tmp2]==false)
                tmp2++;
            cout<<tmp2-tmp<<endl;
        }
    }
    return 0;
}
​​​​

 

 

相关文章:

  • 2021-04-07
  • 2020-06-15
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-03-08
  • 2019-08-29
  • 2019-07-18
  • 2019-08-12
  • 2022-01-09
相关资源
相似解决方案