求素数
if m 为质素,那么m可以表示为a*b;其中ab分别为1和m。
同样合数也可以表示为a*b的形式,那么ab为m的因子,并且(a,b)<m/2;
所以我第一次在2到m/2中找判断是否为素数。
1 #include<stdio.h> 2 void main() 3 { 4 int m,i; 5 for(m=2;m<=100;m++) //1不为素数 6 { 7 for(i=2;i<=m/2;i++) //从2余到这个数的一半 8 { 9 if(m%i==0) break; //丢掉合数 10 } 11 if(i>m/2) printf("%4d",m); 12 } 13 printf("\n"); 14 }
改进:
if 合数m有可以写成a*b,那么有(a,b)<=sqrt(m),原因:如果a是m的因子,那么有a>=sqrt(m),或者a<=sqrt(m),所以有b<=sqrt(m)或者b>=sqrt(m);
比方16的因子:2,4,8;这里2<4,4<8,刚好4*4=16;因此只需判定在 2~4 之间有无因子即可。
另外偶数能被2整数,所以偶数必定是合数,所以可以在奇数中找素数。
1 #include<stdio.h> 2 #include<math.h> 3 int sushu(int ,int ); //用函数实现 4 void main() 5 { 6 int n,k; 7 for(n=101;n<=200;n+=2) //在基数中找素数 8 { 9 k=sqrt(n); 10 sushu(n,k); 11 } 12 printf("\n"); 13 } 14 int sushu(int n,int k) 15 { 16 int i; 17 for(i=2;i<=k;i++) 18 if(n%i==0) break; //丢弃合数 19 if(i>k) printf("%4d",n); 20 return 0; 21 }

浙公网安备 33010602011771号