- 16 名前:デフォルトの名無しさん [2007/02/20(火) 15:31:24 ]
- 双子素数を求めるプログラムを作成してみたのですが、どこか改善点などあれば教えてください。
#include<iostream> using namespace std; const int MAX_NUMBER = 2000; //保存できる素数の数 int sosu[MAX_NUMBER]; //この配列に素数を保存 int main(){ int num=0; //見つけた素数の総数 初期値は0 int i,j,route; int judge; //素数のとき1,素数でないとき0とする int k=0,h=0; sosu[num] = 0; //素数の初期化 for(i=2;i<=10000;i++) //1をとばして2から素数判定を始める { /*エラトステネスのふるい*/ for(route=1;route*route<=i;route++); //iの平方根より大きい自然数で、最も小さいものを求める for(j=0,judge=1;sosu[j]!=0 && sosu[j]<route;j++)//iの平方根より小さい素数で割り切れるものが無いとき、iは素数 { if(i % sosu[j] == 0){ //何らかの素数で割り切れたとき、その数は素数でないので終了 judge = 0; //素数でないので0にする break; } } if(judge){ sosu[num] = i; //新しく見つけた素数の保存 num++; //見つけた素数の数を1増やす sosu[num] = 0; //保存されている素数配列の終わりが分かるように、配列の最後を0にしておく } } while(sosu[k+1]){ //求めた素数のうち双子素数を表示 if(sosu[k+1] - sosu[k] == 2){ //連続する二つの素数の差が2なら双子素数なので表示 cout << "(" << sosu[k] << "," << sosu[k+1] << ")" << " "; h++; //一つの組を表示するたびにカウンタhを1増やす } if(h == 6){ //1行に6つの組が表示されたら改行 cout << endl; h = 0; //カウンタ初期化 } k++; } cout << endl; return 0;}
|

|