結合した連続番号icodelabの数

説明

暁には、時々、例えば2つの品質番号のすべての数字の数が組み合わされることが見出さ:数8,9,10.19数20の間に3つの連続する3一緒に存在する7〜11の連続した係合の存在を23に、 21、22。今、婚約を含む多数の連続番号の数を決定するステップを含むください番号を与えられました。

エントリー

データの複数のセット(グループがない50,000以上)、1行につき1つの正の整数aは、0、入力の入力端の最後の行を表します。

輸出

入力データの各ラインのために、係合を含む多数の連続数、所与の数を含みます。

サンプル入力1

6 
100 
7 
0

サンプル出力1

1 
3 
0

プロンプト

<= 1000,000。

アイデア:最初の合成数に加えて、スクリーニング

それぞれのjが素数になるまで数は、プライムタイムが増加してきたではありません読み

スキップ合成数が発見されました

ノートを参照してください

コード:

#include <iostreamの> 
する#include <cstdioを> 
する#include <CStringの> 

使用して名前空間STD; 
の#define NUM 1299709 
BOOL U [NUMの+ 1]; 
[NUMの+ 1] INT ANS; 
ボイドは(){//Åシーブを調製
	(ためiが<=; I = 2 int型 NUM;)は、i ++はU [I] = 1; // 最初のすべての数が素数であること
	のためには、(INT I = 2; I <= NUM; Iは++){ 
		IF(U [I] ){ 
			(int型J = Iため; J <= NUM / I、J ++)U [Iは、Jを*] = 0;合成数をスクリーニング// 
		}		 
	} 
	のために(INT I = 2; I <= NUM; Iは++){		 
		{//番号(!U [I])に結合している場合は
			int型J = I; 
			しばらく(J <= NUM && U [J]!)J ++; // jが素数でない場合jが素数になるまで、増加されて
			jは- ; // jは位置jを作るためにバックデクリメントされ、場所が合成数である
			ため(int型K = I; K <= J; ++ K); // ANS [k]は、J-iは+ = 1 からKをすべての連続番号jが一緒に同じ番号がに対応している
			が発見された合成数をスキップ//; I = J 
		}他{ 
			ANS [I] = 0;
		}  
	}
} 

int型のmain(){ 
	freopenは( "1.in"、 "R"、STDIN)。
	freopenは( "1.out"、 "W"、STDOUT)。
	int型のk; 
	準備()。
	一方、(scanf関数( "%dの"、及びk)> 0 && K> 0){ 
		のprintf( "%Dを\ n"、ANS [K]> 0 ANS [K]:0)。
	} 
}

 

 

 

おすすめ

転載: www.cnblogs.com/mysh/p/11291567.html