c - 对于素数和非素数,程序没有按预期工作
问题描述
这段代码有什么问题?请帮助我我正在输入 9 它说这个数字是素数并且输出实际上是相反的条件......怎么样?
#include <stdio.h>
#include <conio.h>
int prime(int);
int main()
{
int num,res;
printf("\nENTER A NUMBER: ");
scanf("%d",&num);
res=prime(num);
if(num==1)
{
printf("Neither Prime nor Composite\n");
}
else
{
if(res==0)
printf("\n%d IS A PRIME NUMBER",num);
else
printf("\n%d IS NOT A PRIME NUMBER",num);
}
getch();
}
int prime(int n)
{
int i,p;
for(i=2;i<=n/2;i++)
{
if(n%i==0){
p=0;
} else {
p=1;
}
return p;
}
}
解决方案
return 语句存在于循环中
int prime(int n)
{
int i,p;
for(i=2;i<=n/2;i++)
{
if(n%i==0){
p=0;}
else{
p=1;
}
return p;
}
}
所以在循环的第一次迭代之后,函数退出了。该函数不检查任何其他除数。
例如,对于素数2
,该函数给出了错误的结果。
当传递的参数等于例如时,该函数具有未定义的行为1
。
也主要是这种情况
if(res==0)
printf("\n%d IS A PRIME NUMBER",num);
也是错误的,因为假定该函数为非素数返回 0。
该功能可以如下所示
int isprime( unsigned long long int x )
{
int prime = x % 2 == 0 ? x == 2 : x != 1;
for ( unsigned long long int i = 3; prime && i <= x / i; i += 2 )
{
prime = x % i != 0;
}
return prime;
}
另请参阅我的个人论坛C 函数中的参考,该函数确定一个数字是否为素数
虽然它是用俄语编写的,但您可以使用例如谷歌服务“翻译”将其翻译成英语。
推荐阅读
- vaadin - Vaadin RichTextArea 高度自动调整
- r - 使用在 ArcGIS 中计算的 PCA 在 R 中创建 PCA 图
- r - 使用 R 遍历 URL 层并抓取数据
- javascript - opentok-react-native 订阅者使 android 应用程序崩溃
- c++ - googletest - 找出意外呼叫的位置
- java - ARCore 中的粒子系统
- javascript - 只喜欢和不喜欢一次 php JS mySQL
- javascript - 当您在没有数据库的情况下运行 rails generate scaffold 时,RoR 在哪里定义它创建的对象?
- linux - linux中所有参数为NULL或nullptr时'select()'做什么
- python - Matplot:如果满足条件,则在图上用点表示