gpt4 book ai didi

c - 筛选 8 位素数

转载 作者:行者123 更新时间:2023-11-30 20:48:48 27 4
gpt4 key购买 nike

尽管数组 a 的大小不断增加,但我无法找到 8 位素数。它适用于较小的数字:

#include<stdio.h>
#include<math.h>

int main()
{
int n,a[100000],i,m,k;
scanf("%d",&n);
for (i=2;i<=n;i++)
a[i]=1;
m=(sqrt(n)+1);
for (i=2;i<=m;i++)
if (a[i]==1)
for (k=i*i;k<=n;k+=i)
a[k]=0;
for (i=0;i<=n;i++)
if (a[i]==1)
printf("%d\t",i);
return 0;
}

最佳答案

通过使用本地声明的数组,我无法获得大于 6 位的数字。这样的数组使用堆栈内存,与堆内存相比,堆栈内存供不应求。另一个问题是您没有检查为 n 输入的值是否会破坏您声明的固定大小数组。我通过使用 malloc() 从堆中分配所需的确切内存量来解决这两个问题,并检查内存分配是否有效。

我整理的另一件小事是使用 \t 来格式化输出。一旦数字变大,就会显得困惑。我将字段宽度设置为 10,因为它将包含一个 8 位数字,还因为大多数文本终端的宽度为 80,因此数字不会跨行。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
int n,i,m,k;
int *a;
scanf("%d",&n);
if ((a = malloc((n+1)*sizeof(int))) == NULL) {
printf ("Not enough memory\n");
exit (1);
}
for (i=2;i<=n;i++)
a[i]=1;
m=(sqrt(n)+1);
for (i=2;i<=m;i++)
if (a[i]==1)
for (k=i*i;k<=n;k+=i)
a[k]=0;
for (i=0;i<=n;i++)
if (a[i]==1)
printf("%10d",i);
printf("\n");
free (a);
return 0;
}

关于c - 筛选 8 位素数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28514332/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com