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

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

关注引自免费微信小程序:皆我百晓生
当然,我会竭尽所能帮助你解决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方法正确实现了质数生成逻辑。如果仍有问题,请提供详细的错误信息或具体代码片段以供进一步分析。