Codeforces 449C。Jzzhuとりんご

ポータル

明らかに我々は唯一に等しい$ N / 2 $ A未満の素数を考えます

各$ 2 $の場合、それは現在のマッチの偶数の倍数を持っていない場合は、明らかにこれらの仕上げを一致させることができ、素数$ pが$ではありません

奇数がある場合はそれ以外の場合は、その後、我々は持ち込ますべてのマッチの偶数個を残して、$ 2P $のミスマッチを保ちます

最後に残った数が、残りの奇数番号が一致することはできません滞在する場合にのみ、1は、一致させることができ、$ 2 $の倍数であります

明らかにこれは一致の数の上限です

#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;
BOOL VIS [N]。
ベクトル <ペア< int型int型 >> V; 
インラインボイドイン(int型のx、int型の Y){VIS [X] = VIS [Y] = 1; V.push_back(make_pair(X、Y))。}
 INT PRI [N]、TOT。
BOOL not_pri [N]。
ボイドプレ()
{ 
    not_priは、[ 1 ] = 1 以下のためにint型 I = 2 ; iが<= N; iは++ 
    { 
        もし PRI [++ TOT =(not_pri [I]!)I。
        INT J = 1 ; J <= TOTあり、j ++ 
        { 
            LL G = 1LL * iがPRI [j]を*。場合(G> N)、ブレーク
            not_pri [G] = 1もし(I%PRI [J] ==0ブレーク
        } 
    } 
} 
int型のmain()
{ 
    N = )(読み取ります。プレ()。
    ベクトル < int型 > REM。// rem.push_back(2)。
    以下のためにint型 I = 2 ; I <= TOT && PRI [i]の<= N / 2 ; I ++ 
    { 
        ベクトル < INT > TMP。INT T = PRI [i]は、
        以下のためのint型 J = T; J <= N; J + = t)であれば(!VIS [J])tmp.push_back(J)。
        int型 SZ =tmp.size();
        もし(SZ&1 
        { 
            イン(TMP [ 0 ]、TMP [ 2 ])。rem.push_back(TMP [ 1 ])。VIS [TMP [ 1 ] = 1 INT J = 3、J <SZ、J + = 2)イン(TMP [J]、TMP [J + 1 ])。
        } 
        ほか のためint型 J = 0 ; J <SZ、J + = 2)イン(TMP [J]、TMP [J + 1 ])。
    } 
    のためにint型 I = 2 ; iが<= N; I + =2もし!(VIS [i])とrem.push_back(I);
    INT SZ = rem.size()。
    以下のためにint型 I = 1 ; I <SZ、I + = 2)イン(REM [I]、REM [I- 1 ])。
    printf(" %d個の\ n "INT (V.size()))。
    以下のための(自動A:V)のprintf(" %D%D \ n " 、A.first、A.second)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/LLTYYC/p/11707569.html
おすすめ