する#include <stdio.hの> int型のmain(){ // 奇数の場合、確かに条件がint型NUMと、 scanfの(" %のD "、&NUM); IF(NUMの%2 == 1 ){ のprintf(" %S " " YES " ); 戻り0 ; } // それが偶数であれば/ * * * *リセット入力値nが奇数であるが、2K + 1、その後確かに奇数のK + K + 1に、出力がYESでなければならないので。 入力値nが偶数の場合は、もう少し複雑です。 逆に証拠は、これが連続した自然数の付加形態の偶数で置き換えることができることを前提としています。 そうあってもよいX +(X + 1)+ (X + 2)+ ... +(X + K)== N、 得られた演算シーケンス加算式の数(+ K 2×)と(K + 1)/ 2 == nは、 奇数、次いで2X + kが偶数であるので、奇数と偶数が存在しなければならない場合、K + 1が偶数、奇数の2X + K、K + 1である場合。 我々 (2X + K)への変換式(K + 1)== 2N、 左(2X + K)(K +のよう2nが偶数である 1)が偶数の値を有していなければなりません。 式(2)の両側の因子の連続抽出、なぜなら奇数、(2X + k)の2 ^ 2のパワーであり、M、および式の左辺に2つの抽出因子を2nの場合に継続することができるが(K + 1) 2にはありません^メートル。式の両辺が等しくすることが不可能です。これは、連続フォームに加算2つの自然数の力ではありません。 しかし、たとえ数は、特定のどのような形に分割することが可能に直接的な証拠はありません。だから、抜け穴対象の唯一の利点この問題は、同じタイプの主題彼は、出力の連続した自然数のシーケンスをだろうけれどもとして。したがって、この問題は、直接、nが2のべき乗が可能であるかどうかを判断することができます。 * * / IF((&NUM(num- 1。 ))== 0 ){ のprintf(" %S "、" NO " ); } 他{ のprintf(" %S "、" YES " ); } リターン 0 ; }
ヒント:指定された整数Nを破るは、連続M(M> 1)と正の整数として表すことができます。