Codeforces 1178D。プライムグラフ

ポータル

まず、各点に接続された少なくとも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 = 0INT _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)イン(13)、今++ 
        のために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 ; 
}

 

おすすめ

転載: www.cnblogs.com/LLTYYC/p/11607039.html