C言語 - と需要要因

そして、需要要因

件名の説明:

因子それ自身及びそのような因子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を返します。
}

 

おすすめ

転載: www.cnblogs.com/kgdy-wwy-mfkd/p/11072372.html