求素数

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 }

 

posted @ 2019-11-30 15:01  醉翁之意不在酒YS  阅读(173)  评论(0)    收藏  举报