まず、各点に接続された少なくとも2つのエッジを有していなければなりません
最初に考えることはそう簡単にして、ゆっくりと接していることを確実にするために
$(1,2)、(2,3)、(3,4)、...、(N、1)$:環を形成し、次いで第一
そして、ポイントプラス片面または合法的なを見つけ、プラス側を考慮し、それは$(1,4)、(2,5)、(3,6)$を指示することができる、と辺の数が素数出力された後、直接答えます
$ $ [N、N + \右\ rfloor \ \ lfloor \ FRAC {N-3} {2}左】そこで問題は、現在保証されているかどうかの範囲内の素数が存在しなければなりません
$ [3,1000]で$で見つかったリストを作成するN \ライン上で、その後の特別裁判官、たったの$ N = 4 $の唯一の正当な範囲内ではありません......
公式の説明は、この操作を判明しましたか???それの証拠ありませんか???
#include <iostreamの> する#include <cstdioを> する#include <アルゴリズム> の#include <CStringの> する#include <cmath> の#include <ベクトル> 使用して 名前空間STD。 typedefの長い 長いLL。 インラインint型リード() { int型のx = 0、F = 1。チャー CH = GETCHAR()。 一方、(CH < ' 0 ' || CH> ' 9 '){ 場合(CH == ' - '1 ; CH = GETCHAR()。} 一方、(CH> = ' 0 ' && CH <= ' 9 '){X =(X << 1)+(X << 3)+(CH ^ 48)。CH = GETCHAR()。} 戻りのx *のF。 } のconst int型 N = 1E5 + 7 。 INTのN、M。 構造体の縁{ int型Uを、V。 エッジ(INT _U = 0、INT _V = 0){U = _U、V = _V。} }。 ベクター <エッジ>ANS; インラインボイドイン(INT U、INT V){ans.push_back(エッジ(U、V))。} INT PRI [N]、TOT。 BOOL not_pri [N]。 ボイドプレ() { not_priは、[ 1 ] = 1 。 以下のために(int型 I = 2、iは<= 2 * N; I ++ ) { もし PRI [++ TOT =(not_pri [I]!)I。 用(INT J = 1 ; J <= TOTあり、j ++ ) { LL G = 1LL * iがPRI [j]を*。もし(G>2 * n)を破ります。 not_pri [G] = 1。もし(I%PRI [J] == 0)ブレーク。 } } } int型のmain() { N = )(読み取ります。プレ()。 以下のために(int型 I = 2インを(I、I-iが++; iが<= N)1 ); イン(1、N)int型になりました= N; もし(N == 4)イン(1、3)、今++ 。 他 のために(int型 I = 1 ; I <= N- 3 ; I ++ ) { 場合(not_pri [今])!破ります。 もし(I&1)イン(I、I + 3)、今++ 。 } もし(not_pri [今]){のprintf(" -1の\ n "); リターン 0 ; } のprintf(" %Dを\ n " 今、)。 用(自動車E:ANS)のprintf(" %D%D \ n " 、EU、EV)。 リターン 0 ; }