結果
問題 | No.811 約数の個数の最大化 |
ユーザー | Doneru |
提出日時 | 2019-04-12 21:56:51 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 33 ms / 2,000 ms |
コード長 | 762 bytes |
コンパイル時間 | 1,631 ms |
コンパイル使用メモリ | 169,004 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-14 18:28:11 |
合計ジャッジ時間 | 2,062 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 12 |
ソースコード
#include <bits/stdc++.h> using namespace std; int main(){ int n,k; cin >> n >> k; vector<int> p; map<int,int> num; int tmp = n; for(int i = 2;i*i <= n;i++){ if(tmp%i == 0){ p.push_back(i); while(tmp%i==0){ num[i]++; tmp /= i; } } } int ret = 0; int mxcnt = 0; for(int i = 2;i < n;i++){ tmp = i; int cnt = 0; for(int j = 0;j < p.size();j++){ for(int c = 0;c < num[p[j]];c++){ if(tmp%p[j]==0){ cnt++; tmp /= p[j]; }else{ break; } } } if(cnt < k)continue; cnt = 0; for(int j = 2;j*j <= i;j++){ if(i % j == 0){ if(j*j == i)cnt++; else cnt += 2; } } if(mxcnt < cnt){ mxcnt = cnt; ret = i; } } cout << ret << endl; }