C语言中素数判断

是素数就返回1,不是的话返回0。

int IsPrime(int n)

int i;

if (n == 1 || n == 2 || n == 3 || n == 5)

return 1;

else if (n % 2)

for (i = 3; i <= n / 2 + 1; i += 2)

if (n % i == 0) return 0;

return 1;

else

return 0;

}  代码如下:

#include

#include

void main()

 long m,n=2;

 double l;

 printf("please input an number: \n");

 scanf("%d",&m);

 for(n=2;n<=m;n++)  //这里设置n<=m,是要将2到输入值之间所有的数拿来整除m

  l=m%n;

 if(l==0)  //这里,得到余数为0的时候

  break;  //跳出循环

 if(n

  printf("不是素数\n");

  else  //另外的,如果n不小于m,那只有可能等于m,那么m就不会有别的约数

  printf("是素数\n");

  getch();

首先要清楚什么是素数,素数就是只能被1和自己整除的数字,那么:

我的思路是,首先定义一个变量m存储你输入的数值,然后,从2开始到m依次去作为m的除数,如果在这个过程中有一个数字L能整除m,那么跳出循环,跳出之后判断L是否等于m,如果不等于,那么不是素数,如果相等那么是素数

素数就是只能被1和它本身整除的数,

技巧嘛,那就是所有的偶数都不是素数,所以判定的时候用

for(i=3;i<=100;i+=2)直接判断奇数就好、

比如100以内的素数C程序,

#include

main()

{ int i,k;

for(i=3;i<=100;i+=2)  

for(k=2;k

if(i%k==0)

break;

else

{printf("%d ",i);

break;}

#include

#include

void main()

int num ,a,b,i=0;

scanf("%d",&num);

a=sqrt(num);

for(b=2;b<=a;b++)

if(num%b==0)i=1;

if(i==1)break;

if(i==1)printf("%d不是素数",num);

else printf("%d是素数",num);

}★试除法首先要介绍的,当然非"试除法"莫属啦。考虑到有些读者是菜鸟,稍微解释一下。

"试除",顾名思义,就是不断地尝试能否整除。比如要判断自然数 x 是否质数,就不断尝试小于 x 且大于1的自然数,只要有一个能整除,则 x 是合数;否则,x 是质数。

显然,试除法是最容易想到的思路。不客气地说,也是最平庸的思路。不过捏,这个最平庸的思路,居然也有好多种境界。大伙儿请看:

◇境界1在试除法中,最最土的做法,就是:

假设要判断 x 是否为质数,就从 2 一直尝试到 x-1。这种做法,其效率应该是最差的。如果这道题目有10分,按照这种方式做出的代码,即便正确无误,俺也只给1分。

◇境界2稍微聪明一点点的程序猿,会想:x 如果有(除了自身以外的)质因数,那肯定会小于等于 x/2,所以捏,他们就从 2 一直尝试到 x/2 即可。

这一下子就少了一半的工作量哦,但依然是很笨的办法。打分的话,即便代码正确也只有2分

◇境界3再稍微聪明一点的程序猿,会想了:除了2以外,所有可能的质因数都是奇数。所以,他们就先尝试 2,然后再尝试从 3 开始一直到 x/2 的所有奇数。

这一下子,工作量又少了一半哦。但是,俺不得不说,依然很土。就算代码完全正确也只能得3分。

◇境界4比前3种程序猿更聪明的,就会发现:其实只要从 2 一直尝试到√x,就可以了。估计有些网友想不通了,为什么只要到√x 即可?

简单解释一下:因数都是成对出现的。比如,100的因数有:1和100,2和50,4和25,5和20,10和10。看出来没有?成对的因数,其中一个必然小于等于100的开平方,另一个大于等于100的开平方。至于严密的数学证明,用小学数学知识就可以搞定,俺就不啰嗦了。

◇境界5那么,如果先尝试2,然后再针对 3 到√x 的所有奇数进行试除,是不是就足够优了捏?答案显然是否定的嘛?写到这里,才刚开始热身哦。

一些更加聪明的程序猿,会发现一个问题:尝试从 3 到√x 的所有奇数,还是有些浪费。比如要判断101是否质数,101的根号取整后是10,那么,按照境界4,需要尝试的奇数分别是:3,5,7,9。但是你发现没有,对9的尝试是多余的。不能被3整除,必然不能被9整除......顺着这个思路走下去,这些程序猿就会发现:其实,只要尝试小于√x的质数即可。而这些质数,恰好前面已经算出来了(是不是觉得很妙?)。 

c语言判断素数(c语言判断素数)_c语言判断素数(c语言判断素数)

C语言中怎么判断素数

介绍三种使用C语言来判断素数的方法,以及用做素数表来判断找素数的方法。素数就是只能被1和它本身整除的数,

技巧嘛,那就是所有的偶数都不是素数,所以判定的时候用 for(i=3;i<=100;i+=2)直接判断奇数就好、

比如100以内的素数c程序,

#include

main()

{ int i,k;

for(i=3;i<=100;i+=2)  

for(k=2;k

if(i%k==0)

break;

else

{printf("%d ",i);

break;}

}#include

int isZhishu(int num){

int i,count=0;

for(i=1;i<=num;i++){

if(num%i==0){

count++;

if(count<=2){

return 1;

}else{

return 0;

void main(){

int n;

printf("请输zd入专n:");

scanf("%d",&n);

while(n<2){

if(n>=2){

break;

printf("请输入一个大于等于2的数!属");

printf("\n\n");

printf("请输入n:");

scanf("%d",&n);

if(isZhishu(n)==1){

printf("数字%d是质数!",n);

}else{

printf("数字%d不是质数!",n);

}首先分析需求,素数是指 除了1和它本身以外,不能被任何数整除的数。例如:1,3,5,7,11,13.。。。。。。。

例如输入一个数m,判断m是否是素数。我们可以用 m向小于m大于1的所有整数求余。如果有一个值是等于0,那么,就能证明这个数是素数。

m %(2...(m-1)) == 0。

当然,更好的算法是 m 向 (小于或等于 m的中位数) (大于1) 的所以数求余。

m%(2...(m/2)) == 0

如果你只想求实际代码,当我没说过。因为我这只是提供一个思路。原发布者:gaoshan064

#include#includemain(){inti,n;printf("请输入一个数:");scanf("%d",&n);for(i=2;i=n)printf("素数!");printf("\n");}/*main(){inti,n,m;printf("请输入一个整数:");scanf("%d",&m);n=(int)sqrt(m);for(i=2;in)printf("素数!\n");elseprintf("不是素数!");}*//*intp(intm){inti,n=sqrt(m);for(i=2;in)return1;elsereturn0;}main(){intm;for(m=1;m<=10;m++){if(p(m))printf("%d",m);}printf("\n");}*///3-100间所素数。/*main(){inti,n;for(n=3;n<=100;n++){for(i=2;i=n)printf("%d\t",n);}}*//*main(){inti,m,j;for(i=2;i<=10;i++){m=sqrt(i);for(j=2;jm)//加上这句,如果检查所有的j全部不能整除m,循环结束后,j一定大于m,这时的i才是素