そして、需要要因
件名の説明:
因子それ自身及びそのような因子12などの要因の数の全てを含んでいないので1,2,3,4,6-因子12と16です。今数N(N <= 10 ^ 9)を与えられ、その因子を見つけます。
入力フォーマット:
番号。
出力フォーマット:
番号。
サンプル入力:
12
出力例:
16
ヒント:
60データの%、N- <万=、
データの80%、N - <= 1,000,000;
100%のデータ、N <=10億。
ほとんどの人は1からそのものに加えて、直接の要因の最大数まで、ある直接列挙、列挙を考えると、この問題は、最初に書かれました。以下のコードのこの部分とそう:
する#include <stdio.hの> INT)(主 { 長いN、S = 0、X。 私はint型。 scanf関数( "%のLD"、&N)。 {(私は++; iがn <I = 1)のための (N%I == 0)であれば 、私は= S +。 } のprintf( "%のLD"、S); 0を返します。 }
しかし、このコードは、タイムアウトに大量に検出されました。その理由は、1から要素の最大数を列挙するにはあまりにも多くまで、効率が低すぎることです。列挙の数要因は、あなただけのnの平方根に列挙することができるように入力は、係数で割って飛んだときソリューションは、つまり、あります。コードは以下の通りであります:
する#include <stdio.hに> する#include <math.h>の int型のmain() { 長いN、S = 0。 私はint型。 scanf関数( "%のLD"、&N)。 用(i = 1; I <= SQRT(N)、iは++){ IF(N%I == 0) IF(I == N / I) S + = I。 他の S = sの+ I + N / I; } のprintf( "%のLD"、S - N) 0を返します。 }