m0_72969751 2024-03-02 16:52 采纳率: 20%
浏览 2
已结题

C语言 求质数集合代码报错,找不出来原因,如何解决?(相关搜索:c语言|最大值)

循环已有质数中的最大值到9999,找出第一个不会被已有质数整除的数,填入数组。检查很久都不知道哪里有问题?

img

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-02 16:53
    关注

    引自免费微信小程序:皆我百晓生

    当然,我会竭尽所能帮助你解决C语言编程中关于质数集合的问题以及在C#中寻找第一个不会被已有质数整除的数的问题。但由于您没有提供具体的错误代码和现有代码片段,我将分别给出两种问题的解决方案示例。

    C语言:求质数集合的代码(无报错版本)

    #include <stdio.h>
    
    #define MAX_PRIME 9999
    
    void generate_primes(int primes[], int *size) {
        int is_prime[MAX_PRIME + 1] = {0};
        
        // 初始化所有数为可能的质数
        for (int i = 2; i <= MAX_PRIME; ++i)
            is_prime[i] = 1;
    
        // 标记非质数
        for (int p = 2; p * p <= MAX_PRIME; ++p) {
            if (is_prime[p]) {
                for (int i = p * p; i <= MAX_PRIME; i += p)
                    is_prime[i] = 0;
            }
        }
    
        // 收集质数并计算数组大小
        (*size) = 0;
        for (int i = 2; i <= MAX_PRIME; ++i) {
            if (is_prime[i]) {
                primes[(*size)++] = i;
            }
        }
    }
    
    int main() {
        int prime_array[10000], size = 0;
        generate_primes(prime_array, &size);
        
        // 打印质数集合
        printf("The prime numbers are:\n");
        for (int i = 0; i < size; ++i) {
            printf("%d ", prime_array[i]);
        }
        
        return 0;
    }
    

    C#:查找第一个不会被已有质数整除的数

    using System;
    using System.Collections.Generic;
    
    class PrimeFinder
    {
        List<int> primes;
    
        public PrimeFinder()
        {
            primes = new List<int>();
            GeneratePrimes(9999); // 假设已有一个生成小于等于9999的质数列表的方法
        }
    
        void GeneratePrimes(int limit)
        {
            // 这里假设你已经有了一个填充primes列表的方法,如Sieve of Eratosthenes算法
            // 下面是简化版的示例:
            for (int i = 2; i <= limit; i++)
            {
                if (IsPrime(i))
                {
                    primes.Add(i);
                }
            }
        }
    
        bool IsPrime(int num)
        {
            if (num <= 1)
                return false;
    
            for (int i = 2; i * i <= num; i++)
            {
                if (num % i == 0)
                    return false;
            }
    
            return true;
        }
    
        public int FindNextUncoprimeNumber()
        {
            int number = primes[^1] + 1; // 获取当前最大质数加一作为起始点
            while (true)
            {
                foreach (var prime in primes)
                {
                    if (number % prime != 0)
                        break;
    
                    if (prime * prime > number)
                    {
                        return number; // 没有找到能整除的质数,说明找到了第一个不会被已有质数整除的数
                    }
                }
                number++;
            }
        }
    
        static void Main(string[] args)
        {
            PrimeFinder finder = new PrimeFinder();
            Console.WriteLine($"The first number not divisible by any existing prime below 10000 is: {finder.FindNextUncoprimeNumber()}");
        }
    }
    

    请根据您的实际代码检查上述示例是否与您的实现存在差异,并对照进行调整。对于C#部分,请确保GeneratePrimes方法正确实现了质数生成逻辑。如果仍有问题,请提供详细的错误信息或具体代码片段以供进一步分析。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月10日
  • 已采纳回答 3月2日
  • 创建了问题 3月2日

悬赏问题

  • ¥15 创建一个数据库(要创建的表和记事本的代码截图))
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口