求100以内的素数为例:
方法1:试商法(c语言)
用i=2~m/2之间的整数去试商,若存在某个m能被1与m本身以外的整数i整除,则m不是素数。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdbool.h>
int main()
{
int i = 0,k=0, num;
for (num =2; num <= 100; num++)
{
bool flag = 1;
for (i = 2; i <=num / 2; i++)
{
if (num % i == 0)
{
flag = 0;
break;
}
}
if (flag)
{
k++;
printf("%d\t", num);
if (k % 5 == 0)
{
k = 0;
printf("\n");
}
}
}
return 0;
}
方法二:
用数学的方法可以证明,不能被2~根号m(取整)之间的数整除的数,一定不能被1和它本身之外的其它任何整数整除。
方法三:筛选法
(1不是素数,换成0,剩下的数中2最小,是素数,然后把它的倍数全部换成0;剩下的数中3最小,是素数,然后把它的倍数全部换成0......)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#define N 100
int main()
{
int i, j, k = 0, a[N];
for (i = 0; i < N; i++)
{
a[i] = i + 1;//将1~100赋值给a[0]~a[99]
}
a[0] = 0;//1不是素数换成0
for (i = 0; i < N - 1; i++)
{
for (j = i + 1; j < N; j++)
{
if (a[i] != 0 && a[j] != 0)
{
if (a[j] % a[i] == 0)
{
a[j] = 0;//将a[i]的倍数全部换成0
}
}
}
}
for (i = 0; i < N; i++)
{
if (a[i] != 0)
{
k++;
printf("%d\t", a[i]);
if (k % 5 == 0)
{
k = 0;
printf("\n");
}
}
}
return 0;
}
方法四(java)
public class Evel_7 {
public static void main(String[] args)
{
final int N=100;
int k=0;
boolean[] isPrimes=new boolean[N+1];
for(int i=0;i<=N;i++)
isPrimes[i]=true;
for(int i=2;i<=Math.sqrt(N);i++)
{
if(!isPrimes[i])
continue;
for(int j=2;;j++)
{
int num=i*j;
if(num>N)
break;
isPrimes[num]=false;
}
}
for(int i=2;i<N+1;i++)
{
if(isPrimes[i])
{
k++;
System.out.println(i);
if(k%5==0)
{
k=0;
System.out.println();
}
}
}
}
}