卧龙岗大学环境怎样:如何编写一个关于素数的程序

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/27 01:37:23
反复输入一个正整数,判别其是否为素数,直到输入0为止。小弟谢谢各位啦
是c语言的,最好不用goto语句,谢谢

#include <stdio.h>

int prime(int valu);

int main()
{
int number;
do
{
scanf("%d",&number);
printf("%d\n",prime(number));
} while(number);
return 0;
}

int prime(int valu) //返回0为非素数,1为素数
{ int i,flag;
for (i=2;i<=(valu/2);i++)
if (0==valu%i) return 0;
return 1;
}

P.S:To 楼下的
输入2的话for循环直接不执行,return 1
以上程序在Dev C++下编译测试通过。
对于大的数,的确是用平方根去判断效率高一点,或者用筛法将素数存储在数组中,用空间换时间。

二楼的程序如果输入2会怎么样?好象判定为非负数
#include <stdio>
#include "math.h"

bool isPrime(int valu);

int main()
{
int number = 1;
while(number!=0)
{
scanf("%d",&number);
if(number <= 0)
break;
if(isPrime(number))
printf(......);
else
printf(......);
}
return 0;
}

bool isPrime(int valu) //返回flase为非素数,true为素数
{
if(valu==1 || valu%2 == 0)
return flase;
if(valu==2 || valu==3)
return true;
int i, flag=sqrt(valu)+1;
for (i=3;i<=flag;i += 2)
if (valu%i == 0) return flase;
return true;
}
/*
思路和上面差不多吧,解决了几个边界值(0~3,另外把负数也作为退出条件),改变循环结构为了不去判断非法数据
在bool()中用了一些特殊值的判断,但是效率提高了一半左右(当valu比较大的时候),我觉得是值得的
对于特别大的valu,用一个线性表(数组就行了吧)存储小于其开方的质数应该是比较高效的,有兴趣不妨试试
*/

使用什么语言?