1.素数計算(力任せ法)
#include "stdafx.h"
int a[1001];int num_of_a;
int prime()
{
int i,n; long num =0; num_of_a=0;
for(n = 2; n <=1000; n++) {
for (i = 2; i<n; i++) {
num++; // 計算回数のカウント
if ((n % i) == 0) break; // 余りが0であれば割り切れた
}
if (n == i)a[ num_of_a++] = n; // 最後まで割り切れなければ
} // 素数とみなす
return num;
}
int main(int argc, char* argv[])
{
int i,num=prime();
for(i=1;i<num_of_a;i++) printf("%d ",a[i]);
printf("\n Number of Compute = %d\n",num);
return 0;
}
2.改良1
#include "stdafx.h"
int a[1001];int num_of_a;
#include "stdafx.h"
int a[1001];int num_of_a;
long prime() //改良1
{
int
i,n; long num=0; //計算回数
num_of_a=0; a[num_of_a++] = 2; a[num_of_a++] = 3;
for(n = 5; n <=1000; n += 2)
{ bool flag=true;
for (i = 1; i<num_of_a; i++){
num++; // 計算回数のカウント
if ((n % a[i]) == 0){// 余りが0であれば割り切れた
flag=false; break;
}
}
if (flag)a[num_of_a++] = n; // 最後まで割り切れなければ
} // 素数とみなす
return num;
}
(int mainは同じ)
3.改良2
#include "stdafx.h"
int a[1001];int num_of_a;
long prime()
{
int i,n; long num=0; //計算回数
num_of_a=0; a[num_of_a++] = 2; a[num_of_a++] = 3;
for(n
= 5; n<=1000; in += 2)
{ bool flag=true;
for (i = 1; a[i]*a[i]<=n; i++){
num++; // 計算回数のカウント
if ((n % a[i]) == 0){// 余りが0であれば割り切れた
flag=false; break;
}
}
if (flag)a[num_of_a++] = n; // 最後まで割り切れなければ
} // 素数とみなす
return num;
}
(int mainは同じ)
4.エラトステネスのふるい
#include "stdafx.h"
int a[1001];int sieve[1001];int num_of_a;
long prime() //エラトステネス
{
int i,j;
for(i=2;i<=1000;i++) sieve[i]=i;
for(i=2;i<=1000;i++)
if(sieve[i] !=0)for(j=2*i;j<=1000; j+=i) sieve[j]=0;
num_of_a=0;
for(i=2;i<=1000;i++)
if(sieve[i] !=0) a[num_of_a++]= sieve[j];
return 0;
}
(int mainは同じ)