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は同じ)