結果
| 問題 |
No.28 末尾最適化
|
| コンテスト | |
| ユーザー |
togari_takamoto
|
| 提出日時 | 2016-02-26 00:12:57 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
AC
|
| 実行時間 | 372 ms / 5,000 ms |
| コード長 | 1,478 bytes |
| コンパイル時間 | 1,578 ms |
| コンパイル使用メモリ | 168,476 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-09-22 13:48:24 |
| 合計ジャッジ時間 | 2,245 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 2 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>; using vb = vector<bool>; using vd = vector<double>; using vl = vector<ll>;
using vvi = vector<vi>; using vvb = vector<vb>; using vvd = vector<vd>; using vvl = vector<vl>;
#define REP(i,n) for(ll i=0; i<(n); ++i)
#define FOR(i,b,n) for(ll i=(b); i<(n); ++i)
#define ALL(v) (v).begin(), (v).end()
#define TEN(x) ((ll)1e##x)
#define MOD 100000009
pair<vl, vl> primeFactors(ll n){
vl p,e;
ll m = n;
for(ll i = 2; i*i <= n; i++){
if(m%i != 0) continue;
int c = 0;
while(m%i == 0) c++, m /= i;
p.push_back(i); e.push_back(c);
}
if(m > 1){
p.push_back(m); e.push_back(1);
}
return make_pair(p,e);
}
int main() {
// cin.tie(0);
// ios_base::sync_with_stdio(false);
cout << fixed << setprecision(5);
ll q;
cin >> q;
REP(_, q) {
ll seed, n, k, b;
cin >> seed >> n >> k >> b;
auto pfs = primeFactors(b);
vl x(n + 1); x[0] = seed;
FOR(i, 1, n + 1) x[i] = 1 + (x[i - 1] * x[i - 1] + x[i - 1] * 12345) % MOD;
ll min_v = 100000;
REP(i_pfs, pfs.first.size()) {
vl x_factors(n + 1, 0);
REP(i_x, n + 1) {
ll v = x[i_x];
while (v%pfs.first[i_pfs] == 0) {
x_factors[i_x]++;
v /= pfs.first[i_pfs];
}
}
sort(ALL(x_factors));
ll sum = 0; REP(i_x, k) sum += x_factors[i_x];
min_v = min(min_v, sum / pfs.second[i_pfs]);
}
cout << min_v << endl;
}
return 0;
}
togari_takamoto