最も数のicodelabについて

説明

すべての数は数の約数に満たない場合は、正の整数の場合は、数に関する数自体よりも少ない、私はこの数は、我々が望むまさにだと思います。

エントリー

正の整数Xを入力します。

輸出

X aは上記の要件および最大数を満たすの出力よりも大きくありません。

サンプル入力1

1000年

サンプル出力1

840

プロンプト

データの10%、1 <= N <= 1,000。データを、1 <= N <= 1,000,000の40%。データの100%に、1 <= N <= 2,000,000,000。

コード(なぜそれがアイデアの先生コード、詳細なメモを借りて書いていません?):

#include <cstdioを> 
する#include <iostreamの> 
使用して名前空間STD; 
ロングロングLLのtypedef; 
; = 12である]プライムint型{0,2 ,. 3 ,. 5 ,. 7 ,. 11、13と、23は、29であり、,. 17 ,. 19です} 
/ / 2 * 3 * 5 * 7 > N * 11 * 13 * 17 * 19 * 23 * 29、 したがって考慮にのみ29取る
LL N-、BestSum、BestNumと、
NUMの//現在の数が行く、最初続い素数をK、除数NUM和の数は、
//数kの上限を制限するためにプライム
(NUMのLL、LL SUM、制限LL、LLのK){ボイドが解決
    IF(SUM> BestSum){//数より除数を発見し、自然の数のより保存された除数
        BestSum =和が; //数保存
        //数自体を保存; BestNum = numは
    そうであれば(和== BestSum &&} / {NUM <BestNum) 分数取る同じ/除数番号、場合
        BestNum NUM =であり; 
    } 
    ため(= I int型1; iは=限度を<; iは++){// iが素数kがかかり番目
        NUM * =プライム[k]を、 
        (N NUM)場合> nより// NUM以上、どうやらあなたは見つけるために行く必要はありません 
            リターンを; 
        // 2番目のパラメータの総和*(1 + i)がおよそいくつかのnum参照プライム分解定理の現在の数を表します
        / /第三のパラメータiは、番号の前に後者を表す数字は、電源の電力を超えることができないで
        解決(NUMは、SUMは*(I + 1)、I、K + 1); 
    } 
} 
int型のmain(){     
    CIN> > N-; 
    //(NUM、和、限界、k)を解き
    、この数は現在NUM来る//、numは素数を制限するために最初のk個の素数、k番目の数の上限が続く、除数の和の数であります     
    (1 ,. 1、30 ,. 1)を解く。
    COUT << BestNum; 
    戻り0; 
}

 

おすすめ

転載: www.cnblogs.com/mysh/p/11306325.html
おすすめ