Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 确定给定数字是否为素数的函数_C - Fatal编程技术网

C 确定给定数字是否为素数的函数

C 确定给定数字是否为素数的函数,c,C,我是一个初学者,我正在学习函数。以下是我编写的代码,用于查找给定的数字是否为素数。但每当我执行它时,我都会看到一个对话框,上面写着“project.exe已停止工作”。我使用的是DEV C++。我的代码有问题吗 #include<stdio.h> int prime (int i); int main() { int a,b; scanf("%d",&a); b=prime(a); if (b==1) printf("prime");

我是一个初学者,我正在学习函数。以下是我编写的代码,用于查找给定的数字是否为素数。但每当我执行它时,我都会看到一个对话框,上面写着“project.exe已停止工作”。我使用的是DEV C++。我的代码有问题吗

#include<stdio.h>
int prime (int i);
int main()
{
    int a,b;
    scanf("%d",&a);
    b=prime(a);
    if (b==1)
    printf("prime");
    else
    printf("not prime");
    return 0;
}
int prime (int i)
{
    int j=0;
    for (j=0;j<=i;j++)
    {
        if (i%j==0)
        break;
    }
    if (j==i)
    return 1;
    else
    return 0;
}
#包括
整数素数(整数i);
int main()
{
INTA,b;
scanf(“%d”和“&a”);
b=素数(a);
如果(b==1)
printf(“prime”);
其他的
printf(“非prime”);
返回0;
}
整数素数(整数i)
{
int j=0;

对于(j=0;j更改素数函数的此代码块:

    int j=0;
    for (j=0;j<=i;j++)
    {
        if (i%j==0)
        break;
    }
intj=0;

对于(j=0;j更改素数函数的此代码块:

    int j=0;
    for (j=0;j<=i;j++)
    {
        if (i%j==0)
        break;
    }
intj=0;

对于(j=0;j它应该从
2
开始,而不是从
0
开始
0
导致被零除,这就是程序停止的原因。正确的是:

int j;
for (j=2;j<i;j++)
{
    if (i%j==0)
    break;
}
if (j==i)
    return 1;
else
    return 0;
// or simply return j == i;
intj;

对于(j=2;j它应该从
2
开始,而不是从
0
开始
0
导致被零除,这就是程序停止的原因。正确的是:

int j;
for (j=2;j<i;j++)
{
    if (i%j==0)
    break;
}
if (j==i)
    return 1;
else
    return 0;
// or simply return j == i;
intj;

对于(j=2;j您需要返回一个不是1的值

int prime (int i) {
    int j;

    if (i <=3) return 1;
    for (j=2;j<i/2;j++)
        if (i%j==0) return j;

    return 1;
}
intprime(inti){
int j;

如果(i您需要返回一个不是1的值。类似这样的

int prime (int i) {
    int j;

    if (i <=3) return 1;
    for (j=2;j<i/2;j++)
        if (i%j==0) return j;

    return 1;
}
intprime(inti){
int j;


如果(我在你第一次通过
j
循环时,
j
是零。你不能被零除或者取这样一个除法的余数。以
j=2
开始循环,因为被一除的余数总是零。同样,对于上限:
i%j
i==j
时是零。毕竟,一个素数er可以被1整除,也可以被自身整除。此外,如果终止条件是
j,则应将函数更改为
bool prime(inti)
并返回
true
false
。将
命名为_prime
也可能是一个好主意,表明它有一个布尔结果。自然数0和1不是prime,因此
prime()
函数应以2启动
j
。从用户处获取输入时,代码应始终提示用户。调用
scanf()
时,始终检查返回值(而不是参数值)为确保操作成功。任何负数都不能是“素数”,因此在第一次通过
j
循环时,应使用所有
无符号的
数字,而不是
int
j
为零。您不能除以零或取此类除法的剩余部分。以
j=2
开始循环,因为剩余部分是零一个除以一的值总是零。同样地,对于上限:
i%j
i==j
时是零。毕竟,素数可以被一整除,也可以自己整除。此外,如果终止条件是
j,则应将函数更改为
bool prime(int i)
并返回
true
false
。将
命名为_prime
也可能是一个好主意,表明它有一个布尔结果。自然数0和1不是prime,因此
prime()
函数应以2启动
j
。从用户处获取输入时,代码应始终提示用户。调用
scanf()
时,始终检查返回值(而不是参数值)为了确保操作成功。没有负数可以是“素数”,所以应该使用所有
无符号
数字,而不是
int
我不是在谈论素数查找算法的效率。我只是建议解决编程崩溃的问题。顺便说一句,我已经编辑了答案。取消了下一票。这也将确保我不是在谈论素数查找算法的效率。我只是建议解决程序崩溃的问题。顺便说一句,我已经编辑了答案。下一票被撤销。这也将确保1和更小的数字不被标记为素数。
j我不需要输入j@Vamshi:是的。但是你不想用它来测试数字的可除性,因为测试会成功,你会错误地将素数标记为非素数。我不需要把j@Vamshi:是的。但是你不想用它来测试数字的可除性,因为测试会成功,你会错误地将素数标记为非素数ST试图写一个布尔结果的函数:是Prime?true还是false。他只是使用int而不是布尔,原因不明。我认为他使用的C,本来没有BoL。C++出来后,我认为大家都习惯于在BoL中思考。他只是试图写出一个布尔函数:Booint?他只是在用int来代替BoL,原因不明。我认为他使用C,它本来就没有BoL。C++出来后,我想大家都习惯于在BoL中思考。