求素数的C程序
嘿,伙计们,我需要制作一个程序,要求用户输入一个数字作为参数,然后让他们知道它是素数还是0。到目前为止,我的代码如下所示,但我有点困惑,如何让它遍历的所有可能值,并确保它不是一个非素数。现在发生的是程序打开,我输入一个值,什么也没发生。注意:我在标题中有数学,因为我不确定在这个阶段是否需要它 编辑:所以我做了建议的更改,还添加了一个FOR循环,但是当我去编译我的程序时,我得到了一个警告:“控件可能会到达非空函数的末尾。”。然而,当我输入一个数字并按ENTER键时,程序确实会编译,无论它是否是素数,我都会得到一个错误,返回时说“浮点异常:8” 编辑2:浮点错误已被修复,但现在程序似乎认为每个数字都是非素数,并以这种方式输出。我似乎不明白它为什么会这样做。我还收到了“控件可能到达非无效函数结尾”的警告求素数的C程序,c,C,嘿,伙计们,我需要制作一个程序,要求用户输入一个数字作为参数,然后让他们知道它是素数还是0。到目前为止,我的代码如下所示,但我有点困惑,如何让它遍历的所有可能值,并确保它不是一个非素数。现在发生的是程序打开,我输入一个值,什么也没发生。注意:我在标题中有数学,因为我不确定在这个阶段是否需要它 编辑:所以我做了建议的更改,还添加了一个FOR循环,但是当我去编译我的程序时,我得到了一个警告:“控件可能会到达非空函数的末尾。”。然而,当我输入一个数字并按ENTER键时,程序确实会编译,无论它是否是素数
#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;
}