筛选法

利用筛选法求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],"不是素数"); 
    } 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值