用C语言编写一个程序:定义一个判断素数(质数)的函数(函数名自拟),在主函数输入一个整数,通过调用

用C语言编写一个程序:定义一个判断素数(质数)的函数(函数名自拟),在主函数输入一个整数,通过调用自定义函数输出该整数是否为素数

#include<stdio.h>
int issushu(int x)
{
int i;
if(x==1||x=0)
{
return -1;
}
for(i=2;i<=x/2;i++)
{
if(x%i==0)
{
return 0;
}
}
return 1;
}
int main()
{
int num,temp;
scanf("%d",&num);
temp=issushu(num);
if(temp)
{
if(temp==1)
{
printf("%d是素数\n",num);
}
else
{
printf("%d既不是素数,也不是合数\n",num);
}

}
else
{
printf("%d不是素数\n",num);
}
return 0;
}

追问

要最简单的

issushu是函数名是吗

追答

是的

追问

return 0 -1 1这些是什么

追答

return 0表示不是素数,1表示是素数,-1表示既不是素数也不是合数

追问

定义的函数运行原理是什么

如何做到判断的

x%i==0是什么意思

追答

从2开始判断能否被这个数整除,假如不能被2整除,就继续判断是否能被3整除,假如能被3整除,这个函数调用就结束,return 1;假如不能整除,继续增加,一直判断到x/2;最终也没能整除,说明这个数是素数。

追问

为何判断到x/2,貌似不太准确

判断到本身或sqrt可以吗

num是输入的数是吗

追答

其实判断到sqrt是最精确的,判断到x/2或者本身,也可以计算出来,就是计算量大一点。num是输入的数值

追问

num是输入的数吗

追答

num是输入的数

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-02
#include"math.h"
int judge(int);
main()
{
int num,result;
scanf("%d",&num);
result=judge(num);
if(result==1) printf("yes\n");
else printf("no\n");
}
judge(int num)
{
inti;flag=1;
for(i=2;i<=sqrt(num);i++)
if(num%i==0)
{
flag=0;
break;
}
return flag;
}追问

你看这对不

追答

也是对的

追问

int issushu这是什么意思

还有需要主函数吗

追答

但是不准确,应该用sqrt来作为门限判定,而不是1/2

追问

i表示的是什么

追答

i是循环指示

你的那个程序改成sqrt更准确

从2开始到这个数的sqrt之间如果有数能够整除x,那x就不是素数

追问

sqrt是啥,从2到本身这样定义不可以吗

哦,开根号,这怎么来判断

追答

举个例,如果这个数是9,那么我们只需要判定2到3(3就是9的开方,即sqrt)就可以了。因为大于3的数不可能整除9。即大于sqrt(num)的数不可能整除num,你可以想一下,数学问题。懂了吗?

追问

哦,智商有点跟不上了嘿嘿,判断到自身减一可以吗

追答

都可以,但是没有意义,只会多做几次循环

追问

哦,谢谢

追答

只用到sqrt就行了

没事

追问

x=1 x=0中间的双坚线什么意思

追答

逻辑或操作,如果满意请采纳哦

追问

不懂,能简单解释下吗

追答

表示x等于1或者x等于0就会进去下面的语句

注意==才是判定,=是赋值

本回答被提问者和网友采纳
相似回答