筛选法

利用筛选法求100以内的素数

  1. 2-10分别做因数
  2. 利用for循环求:数值%因数,看是否为0;如果为零,则该数一定不是一个素数,然后令其等于0;
  3. 循环输出数组中不是素数的元素
//筛选法找出100以内的素数
#include <stdio.h>
#include <math.h>
void main(){
    int arr[101];
    int i,y,j,x,count=0;
    //赋值
    for(i=1;i<101;i++){
        arr[i]=i;   
    } 
    arr[1]=0;
    for(j=2;j<sqrt(100);j++){
        for(x=j+1;x<=100;x++){
            if(arr[j]!=0&&arr[x]!=0){
                if(arr[x]%arr[j]==0)
                    arr[x]=0;
            }
        }
    }

    for(y=1;y<=100;y++){
        if(arr[y]!=0){
            printf("%4d",arr[y]);
            count++;        
        }
        if(count%10==0){
            printf("\n");
        }   
    }
} 

附上普通求解素数的方式:
例:16的素数有1,2,4,8,16,
在进行循环比较16%i==0的时候呢,为节省时间,可以只比较到4;因为到4的时候,就可以判断出16不是一个素数,4是16的平方根。可以用sqrt()函数进行求解一个数的平方的根

int arr[101];
    int i,k,j,x;
    //赋值
    for(i=1;i<101;i++){
        arr[i]=i;   
    } 
    //普通求素数的方式
    for(x=2;x<=100;x++){
        k=(int)sqrt(arr[x]);
        for(j=2;j<=k;j++){
            if(arr[x]%j==0) break;
        } 
        //如果循环完以后,arr[x]%j!=0,j一定大于k
        if(j>k){
            printf("%d是%s\n",arr[x],"素数");
        }
        else
            printf("%d不是%s\n",arr[x],"不是素数"); 
    } 
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页