外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

解説

C - Closest Multiplicative Disassembly

作成者 kammyu、yesantikiss、yuki4869

配点 100 点

実行時間制限
2 秒
メモリ制限
512 MiB

ab=Nab=N を b=Nab=\frac Na と変形することで aa から bb が一意に定まることが分かります。
よって、答えとなる aa を探すことを考えます。

a2≤ab=Na^2\le ab=N より、aa が正整数であることも併せて 1≤a2≤N1\le a^2\le N の範囲を探索すればいいことが分かります。

後はある aa について、b=Nab=\frac Na が正整数になればよいです。つまり aa が NN を割り切るかどうかを判定すればいいです。

以上を適切に実装することで、本問題を O(N)O(\sqrt N) で解くことができました。

実装例(C++)

#include <bits/stdc++.h>
using namespace std;
int main()
{
  long long N;
  cin >> N;

  long long a = 1, A;
  while (a * a <= N)
  {
    if (N % a == 0)
      A = a;
    a++;
  }
  cout << A << " " << N / A << endl;
}

ユーザー解説

ユーザー解説を書く

ユーザー解説はまだありません。