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语言来判断素数的方法,以及用做素数表来判断找素数的方法。素数就是只能被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才是素