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存储两个素数的值
     }
    }

  • 相关阅读:
    递归回溯 UVa140 Bandwidth宽带
    嵌入式设备网络设置
    海思板卡SATA最佳读写块大小测试
    Linux日志轮循实现(shell)
    检测应用的内存泄漏情况(shell)
    Python的交叉编译移植至arm板
    写一个简单的配置文件和日志管理(shell)
    shell 实现主板测试
    主板硬件性能测试
    C语言 模2除法
  • 原文地址:https://www.cnblogs.com/xuwanghu/p/2996355.html
Copyright © 2011-2022 走看看