[白準C+]1037薬水
質問する
正数AをNの真約数にするには,NはAの倍数であり,Aは1とNではない.任意の数Nのすべての真約数が与えられた場合、Nを求めるプログラムを作成してください.
入力
第1行はNの真約数の個数を与える.この数は50以下の自然数です.2行目はNの真約数を与える.10,000,000以下、2以上の自然数は、繰り返しません.
しゅつりょく
1行目にNを出力します.Nは常に32ビットの整数で表すことができる.
https://www.acmicpc.net/problem/1037
に答える
重要なのは、最大100万回入力することです.
C/C++ではint型配列の最大サイズは10万程度である.
したがって,すべての値を配列に格納するには,最初から非効率なアクセスであり,約数の特性を利用すればよい.
すべての薬をあげるので、
約数に両端を乗じた値、すなわちNです.
例えば、n=16の場合
2、4、8の約数のうち
2 x 8 = 16
4 x 4=16.
簡単に言えば、入力値の中で最も高い値、最も高い値を見つけて、それから互いに乗じて、Nになりました.
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
int main(void) {
int T, min=0x7fffffff, max = 0;
scanf("%d", &T);
if (T == 1) {
int temp=0;
scanf("%d", &temp);
printf("%d", temp * temp);
}else{
while (T--) {
int temp;
scanf("%d", &temp);
if (min > temp)
min = temp;
if (max < temp)
max = temp;
}
printf("%d", min * max);
}
return 0;
}
ここで、0 x 7 fffffffはintの最値を16進数と表記するReference
この問題について([白準C+]1037薬水), 我々は、より多くの情報をここで見つけました https://velog.io/@cldhfleks2/1037テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol