求素数的C程序

求素数的C程序,c,C,嘿,伙计们,我需要制作一个程序,要求用户输入一个数字作为参数,然后让他们知道它是素数还是0。到目前为止,我的代码如下所示,但我有点困惑,如何让它遍历的所有可能值,并确保它不是一个非素数。现在发生的是程序打开,我输入一个值,什么也没发生。注意:我在标题中有数学,因为我不确定在这个阶段是否需要它 编辑:所以我做了建议的更改,还添加了一个FOR循环,但是当我去编译我的程序时,我得到了一个警告:“控件可能会到达非空函数的末尾。”。然而,当我输入一个数字并按ENTER键时,程序确实会编译,无论它是否是素数

嘿,伙计们,我需要制作一个程序,要求用户输入一个数字作为参数,然后让他们知道它是素数还是0。到目前为止,我的代码如下所示,但我有点困惑,如何让它遍历的所有可能值,并确保它不是一个非素数。现在发生的是程序打开,我输入一个值,什么也没发生。注意:我在标题中有数学,因为我不确定在这个阶段是否需要它

编辑:所以我做了建议的更改,还添加了一个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);
    }
#包括
#包括
整数素数(整数a){
int b;

对于(b=1;b1.您从未初始化过
i
(它具有不确定的值-局部变量)

2.您永远不会调用函数
是素数


使用循环将是一个好主意。与您现在拥有的相比。

我建议您从试除法开始。您需要除以的最小数字集是多少来决定
a
是否为素数?您何时可以证明,如果
a
有一个因子
q
,它必须有一个较小的因子
p
?(提示:它有一个素数分解。)

我只是稍微修改了你的函数。下面是代码

#include <stdio.h>
#include <math.h>

int prime(int a)
{
    int b=2,n=0;

    for(b=2; b<a; b++)
    {
        if (a%b==0)
        {
            n++;
            break;
        }
    }

    return(n);
}
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 not a prime number \n",c);
    }
    else
    {
        printf("%d is a prime number\n",c);
    }

    return 0;
}
#包括
#包括
整数素数(整数a)
{
int b=2,n=0;

对于(b=2;b程序在素数查找算法中的某些错误:

  • 您以数字1开始循环-这将使您测试的所有数字都是而不是素数,因为当您测试一个被
    1
    除法的值是否为零时,它是真的(所有数字都可以被1整除)
  • 通过循环直到a,该模也将为零(所有数字都可以被本身整除)
  • 一个数成为素数的条件是它必须能被
    1
    本身
    整除。就是这样。所以你不能在循环中测试它
main
上,您得到的错误(控件到达非无效函数的末尾)是因为您声明
main
以返回
int

int main(void)
要解决这个问题,您应该在
main
函数的末尾放一个
return0;
语句。下面是一个工作代码

#include <stdio.h>
#include <math.h>

int prime(int a)
{
    int b;

    for (b = 2; b < a; b++) {
        if (a % b == 0)
            return (0);
    }
    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);
    }
    return 0;
}
#包括
#包括
整数素数(整数a)
{
int b;
对于(b=2;b


另一方面,不要用CAPSLOCK写完整的句子。

从数学上讲,一个数字的最大除数可以和它的平方一样大,所以我们只需要循环到sqrt(number)

一个有效的函数是:

//Function that returns 1 if number is prime and 0 if it's not
int prime(number) {
    int i;

    for (i = 2; i < sqrt(number); i++) {
        if (a % i == 0)
            return (0);
    }
    return 1;
}
//如果数字是素数,则返回1;如果不是素数,则返回0的函数
整数素数(数字){
int i;
对于(i=2;i
#包括
int main()
{
int n,a,c=0;
printf(“输入要检查的数字的值”);
scanf(“%d”和“&n”);
//正在停止用户输入1作为输入。
如果(n==1)
{
printf(“%d不能作为输入输入”,n);
}
对于(a=2;a
让我们从这里的基本知识开始。你真的知道素数是什么吗?如果知道,你能解释一下你的程序应该如何区分素数和非素数吗?
a%b
:当b==0时,引起浮点异常除以1的余数是0。这些…大写字母…伤害了…我的…眼睛…%-(你为什么对我们大喊大叫?我才刚刚开始有不止一个函数,所以像素数分解这样的东西对我来说似乎非常有用,尤其是在看过维基的例子之后。好的。我的意思是:如果n是复合函数,它的素数因子必须小于或等于√ n、 (如果其因子m大于平方根,则n/m为较小的因子,如果其因子为复合因子,则其素因子较小。)然而,对于这项作业,你可以忽略最优性,尝试除以比你能得到的更多的数字。这仍然有效。是的,我想,一旦我开始在学期中学习更多,讲师会要求我使用类似的东西,而不是像我一样尝试。但谢谢你,只有一个问题。你在哪里使用过休息,我也可以吗使用return(0)在那里停止程序,或者它必须在那里中断?哦,我看到了我在main函数中犯的错误。非常感谢您的帮助。非常感谢。@zwarrior您可以在这个函数中将返回值更改为bool,因为
#include<stdio.h>
int main()
{
    int n , a, c = 0;
    printf ("enter the value of number you want to check");
    scanf ("%d", &n);
    //Stopping user to enter 1 as an input.
    if(n==1)
    {
        printf("%d cannot be entered as an input",n);
    }
    for(a = 2;a < n; a++)
    {
        if(n%a==0)
        {
            c=1;
            break;
        }
    }
    if(c==0 && n!=1)
    {
        printf("%d is a prime number \n",n);
    }
    else
    {
        if(c!=0 && n!=1)
        {
        printf("%d is not a prime number \n",n);
        }
    }
    return 0;
}