C程序查找素数

时间:2015-09-18 10:19:40

标签: c

嘿伙计们所以我需要制作一个程序,要求用户输入一个数字作为参数,然后告诉他们是否是素数,否则为0。所以我到目前为止的代码如下所示,但我对如何使它运行所有可能的值并确保它不是非素数有点困惑。现在发生的事情是程序打开,我输入一个值,没有任何反应。注意:我在标题中有数学,因为我不确定在这个阶段是否需要它。

编辑:因此我建议进行了更改,并且在我编写程序的同时添加了一个循环我在“ 控制线之间获得警告可能会触及无效功能的结束 ”。然而,当我输入一个数字而且输入相反的时候,程序就会编辑,无论是否是一个主要数字,我会收到错误的回复说“ 浮动点异常: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);
    }

6 个答案:

答案 0 :(得分:1)

1。你从未初始化i(它有不确定的值 - 局部变量)。

2。您永远不会调用函数is_prime

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

答案 1 :(得分:0)

我建议你从试验部门开始。你需要除以最小数字集来确定a是否为素数?你什么时候可以证明,如果a有一个因子q,它必须有一个较小的因子p? (提示:它有一个主要的分解。)

答案 2 :(得分:0)

我刚刚修改了你的功能。这是代码

#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,因为一旦数字可以被整除,我就不会# 39;我想再检查一下。因此,它将退出循环。
  2. 在main函数中,没有为printf()语句正确分配。如果回答== 1,则不是素数。 (因为这意味着一个数字可以被其他数字整除)。你写过,这是一个素数(这是错误的)。
  3. 如果您有任何疑问,请让我听听。

答案 3 :(得分:0)

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

  • 你用数字1开始循环 - 这会使你测试的所有数字不是素数,因为当你测试modulo的时候1除以零,它是真的(所有数字都可以被1整除)。
  • 你经历循环直到a,其模数也将为零(所有数字都可被自身整除)。
  • 要素数的条件是它必须可以被1itself整除。而已。所以你不能在那个循环中测试那个

main 上,您获得的错误(控件达到非空函数的结尾)是因为您将main声明为返回int

int main(void)

要解决这个问题,您应该在return 0;函数的末尾添加main语句。贝娄,一个有效的代码。

#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.

答案 4 :(得分:0)

从数学上讲,数字的最大除数可以与数字的平方一样大,因此我们只需要循环直到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;
}

答案 5 :(得分:0)

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