gpt4 book ai didi

c - 我写了一个程序来打印所有素数直到给定一个数字

转载 作者:行者123 更新时间:2023-12-02 02:52:08 25 4
gpt4 key购买 nike

#include<stdio.h>

float abso(float a)
{
if(a<0.0)
return(-1*a);
else
return a;
}

int sqert(int x)
{
float x1 = (float)x;
float g1, g2;
g1 = x1/2.0;
g2 = x1/g1;
double e=0.000000001;
int sr;
while(abso(g1-g2)>=e)
{
g2 = (g1+x1/g1)/2.0;
g1 = x1/g2;
}
sr = (int)g1;
return(sr);
}

int main()
{
int num;
//num = 0;
printf("Enter a num between 1 and 1000 ");
scanf("%d",&num);
//printf("hello");
int flag;
flag = 0;
int i;
i = 2;
int m, j;
m = j = 0;

while(i<=num)
{
flag = 1;
if(i==2)
{
printf("%d ",i);
i++;
}
else if(i==3)
{
printf("%d ",i);
i= i+2;
}
else if(i>3)
{
m = sqert(i);
for(j=2;j<=m;j++)
{
if((i%j) == 0)
{
flag = 0;
break;
}
}

if(flag == 0)
{
i = i + 2;
continue;
}

if(j==m+1)
printf("%d ",i);

i = i + 2;
}
}
printf("\n");
return(0);
}

这里 sqert函数取输入值的平方根,abso 函数取给定值的绝对值。

使用的逻辑很简单,我们迭代到该数字的平方根,然后检查每个数字是否可以被除自身以外的任何其他数字整除,那么它不是素数,否则它是素数。

但是这个程序只适用于高达 5 的值。之后它不会打印任何东西。它也不打印输入的数字。

任何帮助,将不胜感激。

最佳答案

在您的代码中,您尝试比较 floatdouble .

while(abso(g1-g2)>=e)

这是不正确的,因为 float 之间的精度不同。和 double .
double精度是 float 的 2 倍.
float是一个 32 位 IEEE 754 单精度浮点数
(符号 1 位,指数 8 位,值 23*),
即 float 具有 7 位小数精度。
double是一个 64 位 IEEE 754 double 浮点数
(符号 1 位,指数 11 位,值 52* 位),
即 double 具有 15 个十进制数字的精度。

声明 efloat并确保它被分配了一个符合 float 精度的值.
就像是:
float e = 0.00001;

然后您的代码将按预期工作。

@EricPostpischil 在评论中说 sqert函数可能并不总是返回正确的近似值。这是对的。
所以最好使用 sqrt来自 math.h它可以完美地代替 sqert .

关于c - 我写了一个程序来打印所有素数直到给定一个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51779546/

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