筛选法

来源:互联网 发布:php读取数据库并显示 编辑:程序博客网 时间:2024/05/03 15:17

利用筛选法求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],"不是素数");     } 
原创粉丝点击