【发布时间】:2016-11-01 15:42:41
【问题描述】:
在我的 C 课作业中,我们必须编写一个程序来检查整数是否为素数。我在 sqrt() 函数中遇到错误。我的教授告诉我 num 必须是整数,我们必须使用 sqrt() 函数。我认为问题在于 sqrt() 函数不能用于整数,但我的教授告诉我它可以,而且我从其他东西那里得到了一个错误。你们看到问题了吗?
int primality(int num)
{
int isprime;
/*check if num is prime*/
for (int i = 2; i <= sqrt(num); i++)
{
if (num % i == 0)
isprime = 0; /*is not prime*/
else
isprime = 1; /*is prime*/
}
if (isprime == 0)
return 0;
elseif (isprime == 1)
return 1;
}
编辑: 是的,我正在使用 math.h 并编译为 C 代码。
错误消息是“错误:多个重载函数“sqrt”实例与参数列表匹配。
【问题讨论】:
-
你得到的错误信息是......?在没有看到的情况下,(a)您是否包含了 math.h? (b) 你是否与 libm 链接? (我忽略了程序中的任何其他错误,@CarlNorum 指出了一个)
-
在这段代码中,您将从循环的每次迭代中返回。换句话说,您只会进行一次迭代。此代码仅测试您的数字是偶数还是奇数。顺便说一句,更正后的函数应该命名为
isprime。你不能使用bool而不是int作为逻辑值吗? -
你是怎么编译的?我在错误消息中闻到了
C++。 -
我正在使用 Visual C++ 编写和编译我的代码。这可能是问题吗?我以前从未遇到过任何问题。
-
可以将
i <= sqrt(num)改写为i * i <= num