C_求质数

  质数:质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数,这样的数称为质数。

  题设:输入一个大于1的自然数,求出从2到该数之间所有的质数。

  1.  按照素数的定义来求取,用两个for循环。

 1 #include <stdio.h>
 2 int prime(int i){
 3     int j;
 4     for(j=2;j<i;j++){
 5         if(i%j==0){
 6             return 0;
 7         }
 8     }
 9     return 1;
10 
11 }
12 
13 int main(void){
14     int n,i;
15     printf("请输入一个整数: ");
16     scanf("%d",&n);
17     for(i = 2; i <= n; i++){
18         if(prime(i)){
19             printf("%d ",i);
20         }
21     }
22     printf("
");
23 
24 }

  2.  对 1 进行优化,先排除可以被2整除的数(一定不是质数),sqrt()减少循环的区间。

 1 #include <stdio.h>
 2 #include <math.h>
 3 int prime(int i){
 4     int j,temp;
 5     temp=sqrt(i)+1;//sqrt()
 6     for(j=2;j<temp;j++){
 7         if(i%j==0){
 8             return 0;
 9         }
10     }
11     return 1;
12 }
13 int main(void){
14     int n,i;
15     printf("请输入一个整数: ");
16     scanf("%d",&n);
17     for(i = 2; i <= n; i++){
18         if(i % 2 != 0){ //除去2的倍数。
19             if (prime(i)) {
20                 printf("%d ",i);
21             }
22         }
23     
24     }
25     printf("
");
26 
27 }

  3.  筛选法

 1 #include "stdio.h"
 2 #include "math.h"
 3 int main(void){
 4     int i,j,n,t,a[10000];
 5     t = 0;
 6     for(i = 0; i < 10000; i++){
 7         a[i] = 1;
 8     }
 9 
10     printf("请输入一个大于1的整数: ");
11     scanf("%d",&n);
12 
13     for(i = 2; i <= n; i++){
14         if(a[i] == 1){
15             for(j = i*2; j <= n; j = j+i){
16                 a[j] = 0;
17             }
18             printf("%d ",i);
19             t++;
20         }
21     }
22     printf("
");
23     printf("%d",t);
24 
25 
26 }

   3-1  筛选法优化

 1 #include <stdio.h>
 2 #include <math.h>
 3 
 4 int main(){
 5     int arr[1000], i, j, n;
 6     arr[2] = 1;
 7     for(i=3; i<1000; i++){
 8         if(i % 2==0){
 9             arr[i] = 0;
10         }else{
11             arr[i] = 1;
12         }
13     }
14 
15     printf("请输入一个整数: ");
16     scanf( "%d", &n);
17 
18     for(i=2; i<=n; i++){
19         if (arr[i] == 1){
20             for(j=i*i; j<=n; j=j+i*2){
21                 arr[j] = 0;
22             }
23 
24             printf("%d  ",i);
25         }
26     
27     }
28 
29 
30 }
原文地址:https://www.cnblogs.com/LinSL/p/7339015.html