zoukankan      html  css  js  c++  java
  • 寻找素数对

    #include<stdio.h>
    #include<math.h>
    #define max 10001      //素数表范围
    int flag[max+1];        //标志一个数是否为素数
    int prime[max+1];       //素数表,下标从0开始
    int size;              //素数个数
    void main()
    {
     int i,j,size=0,M,sum,min,a[2],s;
        for(i=2;i<=max;i++)          //将偶数标志为0,奇数标志为1
     {
      if(i%2==0)
       flag[i]=0;
      else
       flag[i]=1;
        }
        for(i = 2; i <= max / 2; i++)  
        {
            if(flag[i]==1)
            {
                for( j = 2*i ; j <= max; j += i) //将已知的素数的倍数标志为0
                {
                    flag[j] = 0;
                }
            }
        }
        for( i = 2 ; i <= max; i++)
        {
            if(flag[i]==1)
            {
                prime[size++] = i; //搜索标志为1 的数就是素数,将素数存入prime数组中间
            }
        }

    /* for(i=0;i<size;i++)
       printf("%d ",prime[i]);*/
     while(scanf("%d",&M)!=EOF)
     {
      sum=0;
      min=M;   //将最小值赋值为M
      for(i=0;i<size;i++)
      {
       for(j=0;j<size;j++)
       {
        sum=prime[i]+prime[j];    //搜索和为M的两个素数
        if(sum==M)
        {
         s=abs(prime[i]-prime[j]); //找出数之差最小的两个素数
         if(s<min)
         {
          min=s;
          if(prime[i]>prime[j])    //按从小到大输出
          {
           a[0]=prime[j];
           a[1]=prime[i];
          }
          else
          {
           a[0]=prime[i];
           a[1]=prime[j];
          }
         }
        }
        if(sum>M) break;    //两数之和大于M则跳出循环
       }
      }
      printf("%d %d\n",a[0],a[1]);    //用数组a存储两个素数的值
     }
    }

  • 相关阅读:
    luogu P3804 【模板】后缀自动机 (SAM)
    莫队
    luogu P4688 [Ynoi2016]掉进兔子洞
    FZOJ 2331 LYK loves graph
    字典树
    luogu P6623 [省选联考 2020 A 卷] 树
    luogu P6018 [Ynoi2010]Fusion tree
    luogu P3264 [JLOI2015]管道连接
    最小斯坦纳树
    9. 回文数
  • 原文地址:https://www.cnblogs.com/xuwanghu/p/2996355.html
Copyright © 2011-2022 走看看