gpt4 book ai didi

C 程序取整数(无论它是素数还是非素数)

转载 作者:行者123 更新时间:2023-11-30 16:26:21 25 4
gpt4 key购买 nike

我有这个C程序代码是完整的,它工作得很好,但不是正确的结果。我在下面有它们的代码源。谁能帮我看看发生了什么或者我错过了什么?欢迎大家纠正这个英文或者代码。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main (int argc, char *argv[])
{
int n;
int result;

if (argc < 2)
{
printf ("Usage: p4 <number>\n");
}
n = atoi (argv[1]);

if (n < 2)
{
printf ("input number should be > 1\n");
}
result = isprime (n);

if (result == 1)
printf ("%d is prime\n", n);
else
printf ("%d is not prime\n", n);
return 0;
}

我创建了一个名为 isprime 的函数,如果传递给它的整数是质数,则返回 true(即 1);如果传递给它的整数是合数(即不是质数),则返回 false(即 0)。如果一个数字可以被2 或任何不超过该数本身平方根的奇数,否则它是素数。在我对其进行编程后,输出并不是我所期望的引用值。

Compiled:

p4:
-Output of program (p4) is not correct for input '9872349871':
------ Yours: ------
1282415279 is not prime
---- Reference: ----
9872349871 is not prime
--------------------

最佳答案

问题是输入值 9872349871 太大,无法放入 32 位整数。

您需要重写程序才能使用 long long而不是int (这应该给你一个 64 位整数)并且为了解析命令行参数,你需要切换 atoiatoll .

警告:如果您的 isprime实现(问题中未显示)通过将值乘以自身( a <= sqrt(b) )来避免平方根检查( a*a <= b ),该平方值甚至可能会溢出 64 位整数的限制。因此,您可能需要修改该函数,例如使用 a <= b/a .

关于C 程序取整数(无论它是素数还是非素数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53105113/

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