用多种方法求素数
题目说明
输出范围内的所有素数(例如1~100)
(1)用筛选法输出素数
假设输出0~100中所有的素数,将其能够整除2到99的数都赋值为零,说明这些数不是素数,然后将其他的数输出
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void primer(int n)
{
int *arr=(int *)malloc(n*sizeof(int)); //n个参数需要的字节//相当于定义int arr[n];
assert(arr!=NULL);
if(arr==NULL)
{
return;
}
for(int i=2;i<n;i++)
{
arr[i]=1;
}
arr[0]=arr[1]=0;
for(int i=2;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if(j%i==0)
{
arr[j]=0;
}
}
}
for(int i=0;i<n;i++)
{
if(arr[i]==1)
{
printf("%d ",i);
}
}
}
int main()
{
primer(100);
return 0;
}
(2)判断n能不能被1~n-1中间的数整除
#include<stdio.h>
int main()
{
int n,i,t[100],h,k;
for(n=0;n<=100;n++)
{
for(i=2;i<n;i++)
{
if(n%i==0)
break;
}
if(i>n)
{
h++;
t[k++]=n;
}
}
printf("%d\n",h);
for (i=0;i<k;i++)
printf("%d ",t[i]);
return 0;
}
(3)判断n能不能被1~√n中间的数整除
#include<stdio.h>
#include<math.h>
int main()
{
int i,j;
int count;
int flag;
count=0;
for(i=2;i<=100;i++)
{
flag=1;
for(j=2;j<=sqrt(i*1.0);j++)
{
if(i%j==0)
{
flag=0;
break;
}
}
if(flag==1)
{
printf("%d ",i);
count++;
//if(count%5==0) //这只是用来美化输出的,便于查看
//printf("\n");
}
}
return 0;
}