嘿,伙计们,我需要做一个程序,要求用户输入一个数字作为参数,然后让他们知道它是一个素数还是0,否则。所以,我目前的代码如下,但我有点困惑,如何使它运行所有可能的值,并确保它不是一个非素数。现在发生的是,程序打开,我输入了一个值,但没有任何React。注意:我有数学在标题,因为我不确定它是否需要或不在这个阶段。
编辑:因此,我进行了建议的更改,并添加了一个FOR循环。然而,当我去编译我的程序时,我得到了一个警告,沿着“控制可能到达非空函数的结尾"的行。然而,当我去输入一个数字并点击Enter时,程序确实编译了,无论它是否是素数,我得到一个错误,返回”浮点异常:8“。
编辑2:浮点错误已经修复,但是现在程序似乎认为每个数字都是非素数并以这种方式输出。我看不出它为什么会这样做。我还收到“控件可能到达非空函数的末尾”警告
#include <stdio.h>
#include <math.h>
int prime(int a){
int b;
for(b=1; b<=a; b++){
if (a%b==0)
return(0);
}
if(b==a){
return(1);
}
}
int main(void){
int c, answer;
printf("Please enter the number you would like to find is prime or not= ");
scanf("%d",&c);
answer = prime(c);
if(answer==1){
printf("%d is a prime number \n",c);
}
else
printf("%d is not a prime number\n",c);
}
7条答案
按热度按时间vi4fp9gy1#
**1.**您从未初始化
i
(它具有不确定的值-局部变量)。**2.**不要调用函数
is_prime
。使用循环将是一个好主意。与你现在所拥有的相比。
lsmepo6l2#
我只是稍微修改了一下你的函数。
说明-
1.在for循环中,我从2开始,因为我想知道给定的数是能被2整除还是大于2的数,我用了break,因为一旦数能被整除,我就不想再检查了,所以它会退出循环.
1.在你的main函数中,你没有为printf()语句正确赋值。如果答案==1,它就不是一个质数。(因为这意味着一个数可以被其他数整除)。你写的,它是一个质数(这是错误的)。
如果你有任何疑问,让我听听。
ivqmmu1c3#
我建议你从试除法开始。要判断
a
是否为素数,你需要除以的最小数集是什么?你什么时候能证明,如果a
有一个因子q
,它一定有一个更小的因子p
?(提示:它具有素分解。)xfb7svmp4#
您的程序在查找素数的算法中出现的一些错误:
1
的modulo是否为零时,它是真的(所有数字都能被1整除)。a
,它的模也将是零(所有的数字都可以被自己整除)。1
和itself
整除,就是这样,所以你不能在这个循环中测试它。在**
main
**上,您得到的错误(控件到达非void函数的末尾)是因为您声明main
以返回int
。为了解决这个问题,你应该在
main
函数的末尾放一个return 0;
语句。顺便说一句,不要使用CAPSLOCK来写完整的句子。Seems like you're yelling.
zbdgwd5y5#
数学上,一个数的最大除数可以和它的平方一样大,所以我们只需要循环到sqrt(number)。
有效函数为:
bz4sfanl6#
plicqrtu7#