注册 登录
编程论坛 C语言论坛

大佬求助:为什么这段程序总是显示sprt函数调用不明确,怎么改

zj121 发布于 2020-05-05 09:58, 1550 次点击
#include<stdio.h>
#include <math.h>

int prime(int n)

{

int i,m;

m=sqrt(n);
for(i=2;i<=m;i++)
if(n%i==0)

return(0);

return(1);

}
int main()
{
int n;
scanf("%d",&n);
if(prime(n))
printf("%d is prime.\n",n);
else
printf("%d is not prime.\n",n);
return 0;
}
5 回复
#2
lin51616782020-05-05 10:22
因为应该是sqrt
#3
纯蓝之刃2020-05-05 10:22
程序代码:
int prime(int n)
{
    int i;
    double m;

    m=sqrt(n);
    for(i=2; i<m; i++)
    {
        if(n%i==0)
            return(0);
    }
    return(1);
}


sqrt返回值是double的
#4
lin51616782020-05-05 10:48
以下是引用纯蓝之刃在2020-5-5 10:22:39的发言:

int prime(int n)
{
    int i;
    double m;

    m=sqrt(n);
    for(i=2; i<m; i++)
    {
        if(n%i==0)
            return(0);
    }
    return(1);
}

sqrt返回值是double的

注意判断素数 需要判断到等于sqrt返回值
不能用小于

假如传入是4
sqrt 4 是2
i<2不成立直接跑 return 1;
结论 4是素数 这就错了
#5
lin51616782020-05-05 10:49
从代码正确性的角度
sqrt转换到int可能会有多1 少1的偏差
误差太大 不适合用在这个地方
建议用 i*i<=m 代替 sqrt
#6
forever742020-05-05 11:44
以下是引用lin5161678在2020-5-5 10:49:20的发言:

从代码正确性的角度
sqrt转换到int可能会有多1 少1的偏差
误差太大 不适合用在这个地方
建议用 i*i<=m 代替 sqrt


经典!
1