結果
| 問題 |
No.811 約数の個数の最大化
|
| コンテスト | |
| ユーザー |
graythunder1
|
| 提出日時 | 2019-06-28 14:55:56 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 1,491 bytes |
| コンパイル時間 | 610 ms |
| コンパイル使用メモリ | 72,504 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-07-02 04:12:53 |
| 合計ジャッジ時間 | 1,243 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 12 |
ソースコード
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <functional>
using namespace std;
typedef long long int ll;
typedef pair<ll,ll> P;
#define repi(i,a,b) for(ll i=a;i<b;i++)
#define rep(i,a) repi(i,0,a)
#define rrep(i,a) for(ll i=a-1;i>=0;i--)
void search(ll val, ll n, ll N, ll k, ll K, ll pidx, vector<P> plist, ll* maxval, ll* maxn){
// printf("val:%lld n:%lld k:%lld p:%lld\n", val, n, k, plist[pidx].first);
if(pidx == (ll)plist.size()){
if(k >= K){
if(val == *maxval) *maxn = min(*maxn, n);
if(val > *maxval) *maxn = n;
*maxval = max(*maxval, val);
}
}
else{
ll powp = 0;
while(n < N){
search(val*(powp+1), n, N, k, K, pidx+1, plist, maxval, maxn);
if(++powp <= plist[pidx].second) k++;
n *= plist[pidx].first;
}
}
}
int main(){
ll N, K;
cin >> N >> K;
ll N_ = N;
vector<P> plist;
for(ll i=2; i*i<=N_; i++){
ll cnt = 0;
while(N_ % i == 0){
N_ /= i;
cnt++;
}
if(cnt){
plist.emplace_back(i, cnt);
}
}
if(N_ > 1) plist.emplace_back(N_, 1);
ll smallp[] = {2, 3, 5, 7, 11, 13};
rep(i, 6){
bool flg = true;
for(auto it=plist.begin();it<plist.end();++it){
if(smallp[i] == (*it).first){
flg = false;
break;
}
}
if(flg) plist.emplace_back(smallp[i], 0);
}
ll maxn = 1, maxval = 0;
search(1, 1, N, 0, K, 0, plist, &maxval, &maxn);
cout << maxn << endl;
return 0;
}
graythunder1