zoukankan      html  css  js  c++  java
  • poj 2689 大范围内素数筛选

     1 /**
     2 给定一定范围求其内的素数
     3 
     4 注意:
     5 **/
     6 
     7 #include <iostream>
     8 #include <math.h>
     9 #include <cstring>
    10 using namespace std;
    11 #define maxn 1000000
    12 long long  prime[500000];
    13 long long cprime[500000];
    14 long long  isprime[maxn+100];
    15 long long  vis[maxn+100];
    16 long long  q;
    17 void getprime(){
    18     //memset(isprime,0,sizeof(isprime));
    19     q =-1;
    20     long long  i,j;
    21     isprime[0] = isprime[1] =1;
    22     for(i=2;i<maxn;i++){
    23         if(!isprime[i])
    24             prime[++q] = i;
    25         for(j=0;j<=q&&prime[j]*i<maxn;j++){
    26             isprime[prime[j]*i] =1;
    27             if(i%prime[j]==0)
    28                 break;
    29         }
    30     }
    31 }
    32 
    33 long long  qt;
    34 void getprime1(long long  a, long long  b){
    35     qt =-1;
    36     if(b<maxn){
    37         for(long long  i=a;i<=b;i++){
    38             if(!isprime[i])
    39                 cprime[++qt] = i;
    40         }
    41     }else{
    42         memset(vis,0,sizeof(vis));
    43         long long  i,k;
    44         for(i=0;i<=b-a;i++){
    45             vis[i] =1;
    46         }
    47         for(i=0;prime[i]*prime[i]<=b&&i<=q;i++){
    48             k = a/prime[i];
    49             if(k*prime[i]<a) k++;
    50             if(k<=1) k++;
    51             while(k*prime[i]<=b){
    52                 vis[k*prime[i]-a] =0;
    53                 k++;
    54             }
    55         }
    56         for(i=0;i<=b-a;i++){
    57             if(vis[i]==1)
    58                 cprime[++qt] = i+a;
    59         }
    60     }
    61 
    62 }
    63 int main()
    64 {
    65     getprime();
    66     //for(int i=0;i<10;i++)
    67     //    cout<<prime[i]<<endl;
    68     long long  a,b;
    69     while(cin>>a>>b){
    70         long long  maxnum =-1;
    71         long long  minnum =0x3f3f3f3f;
    72         getprime1(a,b);
    73         long long  max1,max2,min1,min2;
    74        // for(int i=0;i<=qt;i++)
    75         //    cout<<cprime[i]<<endl;
    76         for(long long  i=0;i<qt;i++){
    77             long long  temp = cprime[i+1]-cprime[i];
    78             if(temp>maxnum){
    79                 maxnum =temp;
    80                 max1 = cprime[i];
    81                 max2 = cprime[i+1];
    82             }
    83             if(temp<minnum){
    84                 minnum =temp;
    85                 min1 = cprime[i];
    86                 min2 = cprime[i+1];
    87             }
    88         }
    89         if((qt+1)<=1)
    90             cout<<"There are no adjacent primes."<<endl;
    91         else
    92             cout<<min1<<","<<min2<<" are closest, "<<max1<<","<<max2<<" are most distant."<<endl;
    93     }
    94     return 0;
    95 }
  • 相关阅读:
    HTTP Error 502.5
    ubuntu 换源 aliyun
    vsdbg 下载方法 使用下载工具下载后手动安装
    Asp.NET Core Nginx Ocelot ForwardedHeaders X-Forwarded-For
    ocelot性能测试
    Hyper V 内部网络(NAT)设置 配置固定IP / DHCP
    Powershell ExecutionPolicy 执行策略
    centos ftp服务器搭建 vsftpd 匿名访问配置方法 ftp 550 Failed to open file 错误处理
    powershell与linux bash对比
    virtualbox 配置记录
  • 原文地址:https://www.cnblogs.com/Bang-cansee/p/3724272.html
Copyright © 2011-2022 走看看