c语言小趴菜555 2023-02-07 18:39 采纳率: 50%
浏览 44
已结题

素数程序编写怎么计算100000以后的1000个素数以及相邻两个素数的最小距离

写一个程序依次寻找100000以后的10000个素数,计算这些素数相邻两个之间的间
距,寻找相邻的间距最小的素数对,将相邻最小间距、相邻最小间距素数对的个数、最大
的相邻间距最小的素数对输出。

  • 写回答

5条回答 默认 最新

  • 关注

    思路:
    1.先写一个判断素数的函数(对于数字n,从2到sqrt(n)进行判断,如果有数字能被n整除,n就不是素数)
    2.whie循环遍历,直到素数的个数等于10000,如果数字n是素数,就根据当前的素数个数进行处理。
    运行结果如下:

    img

    C语言代码:

    #include <stdio.h>
    #include <math.h>
    
    //判断是否是素数
    int isPrime(int n)
    {
        int i, t;
        t = (int)sqrt(n);
        for (i = 2; i <= t; i++)
        {
            if (n % i == 0)
                return 0;
        }
        return 1;
    }
    
    
    int main()
    {
        int start = 100000;
        int min_1 = 0, min_2 = 0;//相邻的间距最小的素数对
        int mindistance = -1; //相邻最小间距
        int maxdistance = -1; //相邻最大间距
        int cnt_min = 0; //相邻最小间距素数对的个数 
        int max_1 = 0, max_2 = 0;//最大的相邻间距最小的素数对
        int n = 0; //素数的总个数
        while (n < 10000)
        {
            if (isPrime(start))
            {
                n++; //素数总个数+1
                if (n == 1)
                {
                    min_1 = start;
                    max_1 = start;
                }
                else if (n == 2)
                {
                    min_2 = start;
                    max_2 = start;
                    mindistance = min_2 - min_1;
                    maxdistance = max_2 - max_1;
                    cnt_min = 1;
                }
                else
                {
                    //判断start与min_2之间的距离与最小间距
                    if (start - min_2 < mindistance) //如果间距更小,则更新最小间距素数对
                    {
                        mindistance = start - min_2;
                        min_1 = min_2;
                        min_2 = start;
                        cnt_min = 1; //重置计数
                    }
                    else if (start - min_2 < mindistance) //如果距离与最小间距相等,则只增加对数
                        cnt_min++; //计数+1
    
                    //判断start与max_2之间的距离与最大间距
                    if (start - max_2 > maxdistance)//如果间距更大,则更新最大间距素数对
                    {
                        maxdistance = start - max_2;
                        max_1 = max_2;
                        max_2 = start;
                    }
                }
            }
            start++;
        }
        printf("相邻的间距最小的素数对:%d %d\n", min_1, min_2);
        printf("相邻最小间距:%d\n",mindistance);
        printf("相邻最小间距素数对的个数:%d\n", cnt_min);
        printf("最大的相邻间距最小的素数对:%d %d", max_1, max_2);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 2月17日
  • 已采纳回答 2月9日
  • 创建了问题 2月7日

悬赏问题

  • ¥15 2024-五一综合模拟赛
  • ¥15 如何将下列的“无限压缩存储器”设计出来
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口