利用筛选法求100以内的素数
- 2-10分别做因数
- 利用for循环求:数值%因数,看是否为0;如果为零,则该数一定不是一个素数,然后令其等于0;
- 循环输出数组中不是素数的元素
//筛选法找出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],"不是素数");
}