C程序查找素数

t98cgbkg  于 2022-12-02  发布在  其他
关注(0)|答案(7)|浏览(157)

嘿,伙计们,我需要做一个程序,要求用户输入一个数字作为参数,然后让他们知道它是一个素数还是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);
    }
vi4fp9gy

vi4fp9gy1#

**1.**您从未初始化i(它具有不确定的值-局部变量)。
**2.**不要调用函数is_prime

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

lsmepo6l

lsmepo6l2#

我只是稍微修改了一下你的函数。

#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;
}

说明-
1.在for循环中,我从2开始,因为我想知道给定的数是能被2整除还是大于2的数,我用了break,因为一旦数能被整除,我就不想再检查了,所以它会退出循环.
1.在你的main函数中,你没有为printf()语句正确赋值。如果答案==1,它就不是一个质数。(因为这意味着一个数可以被其他数整除)。你写的,它是一个质数(这是错误的)。
如果你有任何疑问,让我听听。

ivqmmu1c

ivqmmu1c3#

我建议你从试除法开始。要判断a是否为素数,你需要除以的最小数集是什么?你什么时候能证明,如果a有一个因子q,它一定有一个更小的因子p?(提示:它具有素分解。)

xfb7svmp

xfb7svmp4#

您的程序在查找素数的算法中出现的一些错误:

  • 你从数字1开始循环--这将使你测试的 * 所有 * 数字都不是素数,因为当你测试除以1modulo是否为零时,它是真的(所有数字都能被1整除)。
  • 你通过循环直到a,它的模也将是零(所有的数字都可以被自己整除)。
  • 一个数是素数的条件是它必须能被1itself整除,就是这样,所以你不能在这个循环中测试它。

在**main**上,您得到的错误(控件到达非void函数的末尾)是因为您声明main以返回int

int main(void)

为了解决这个问题,你应该在main函数的末尾放一个return 0;语句。

#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;
}

顺便说一句,不要使用CAPSLOCK来写完整的句子。Seems like you're yelling.

zbdgwd5y

zbdgwd5y5#

数学上,一个数的最大除数可以和它的平方一样大,所以我们只需要循环到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;
}
bz4sfanl

bz4sfanl6#

#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;
}
plicqrtu

plicqrtu7#

#include <stdio.h>
#include <stdlib.h>

int main()
{

  int x,i;

  printf("enter the number : ");
  scanf("%d",&x);
  for ( i=2; i<x;i++){

        if ( x % i == 0){
            printf("%d",x); 
            printf(" is not prime number ");    
            printf("it can be divided by : ");
            printf("%d",i);
            break;
        }[this is best solution ][1]

  }
    if( i>=x) {
        printf("%d",x);
        printf(" is prime number");
    }
}

相关问题