zoukankan      html  css  js  c++  java
  • 素数问题

    http://poj.org/problem?id=2689

    筛选素数 先建一个小素数表 2-sqrt(max) 再根据这个表来进行区间素数的筛选

    View Code
     1 #include<math.h>
     2 #include<stdio.h>
     3 #include<string.h>
     4 __int64 x[1000011];
     5 int pr[46500],pd[46500],pg[1000011];
     6 int main()
     7 {
     8     __int64  n,m,x1,x2,x3,x4,y;
     9     int i,j,k;
    10     for(i = 2 ; i <= 46500 ; i++)
    11     {
    12         if(!pr[i])
    13         {
    14             for(j = i+i ; j <= 46500 ; j+=i)
    15             if(pr[j])
    16             pr[j] = 1;
    17         }
    18     }
    19     int g = 0;
    20     for(i = 2 ; i <= 46500 ; i++)
    21     if(!pr[i])
    22     pd[g++] = i;
    23     while(scanf("%I64d%I64d",&n,&m)!=EOF)
    24     {
    25         memset(pg,0,sizeof(pg));
    26         k = 0;
    27         for(i = 0 ;i < g ; i++)
    28         {
    29             if(n%pd[i])
    30             y = n/pd[i]+1;
    31             else
    32             y = n/pd[i];
    33             if(n<=pd[i])
    34             y++;
    35             for(j = y*pd[i]-n ; j <= m-n ; j+=pd[i])
    36             if(!pg[j])
    37                 pg[j] = 1;
    38         }
    39         if(n==1)
    40             pg[0] = 1;
    41         k = 0;
    42         for(i = 0 ; i <= m-n ; i++)
    43         if(!pg[i])
    44         {
    45             x[k++] = i+n;
    46         }
    47         if(k>1)
    48         {
    49             __int64 min = x[1]-x[0],max=0;
    50             x3 = x[0];
    51             x4 = x[1];
    52             for(i = 1 ;i <k ; i++)
    53             {
    54                 if(x[i]-x[i-1]>max)
    55                 {
    56                     max = x[i]-x[i-1];
    57                     x2 = x[i];
    58                     x1 = x[i-1];
    59                 }
    60                 if(x[i]-x[i-1]<min)
    61                 {
    62                     min = x[i]-x[i-1];
    63                     x4 = x[i];
    64                     x3 = x[i-1];
    65                 }
    66             }
    67             printf("%I64d,%I64d are closest, %I64d,%I64d are most distant.\n",x3,x4,x1,x2);
    68         }
    69         else
    70         printf("There are no adjacent primes.\n");
    71     }
    72     return 0;
    73 }
  • 相关阅读:
    nginx学习1
    win7右下角的网络连接图标不见了~终极必杀技
    centos配置history记录每个用户执行过的命令
    Screen会话命令 Linux
    Linux的运行级别和chkconfig用法
    Linux与Windows中的UTC时间
    Solr 缓存配置
    SolrJ 查询数据
    Solr之困
    solr 查询参数说明
  • 原文地址:https://www.cnblogs.com/shangyu/p/2615404.html
Copyright © 2011-2022 走看看