結果
問題 | No.1383 Numbers of Product |
ユーザー |
![]() |
提出日時 | 2021-02-07 21:08:56 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,199 ms / 2,000 ms |
コード長 | 1,216 bytes |
コンパイル時間 | 3,279 ms |
コンパイル使用メモリ | 198,732 KB |
最終ジャッジ日時 | 2025-01-18 14:13:24 |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 51 |
ソースコード
#include <stdio.h>#include <bits/stdc++.h>using namespace std;#define rep(i,n) for (int i = 0; i < (n); ++i)#define Inf 1000000001int main(){long long N,K,M;cin>>N>>K>>M;map<long long,long long> mp;for(long long i=1;i<=1000000;i++){long long temp = N;long long x = 1LL;for(int j=0;true;j++){temp /= i + K * j;if(temp<=0)break;x *= i + K * j;if(j>=2)mp[x] ++;}}long long cnt = 0LL;for(auto &a:mp){long long tt = a.first;long long ok = 0LL,ng = 1000000001;while(ng-ok>1){long long mid = (ok+ng)/2;long long t = N;t /= mid;t /= mid+K;if(t<=0){ng = mid;continue;}if(mid * (mid+K)<=tt)ok = mid;else ng = mid;}if(ok * (ok+K) == tt){a.second++;cnt++;}}long long ans = 0LL;if(M>=2){for(auto a:mp){if(a.second==M)ans++;}}else{long long ok = 0LL,ng = 1000000001;while(ng-ok>1){long long mid = (ok+ng)/2;long long t = N;t /= mid;t /= mid+K;if(t<=0){ng = mid;continue;}if(mid * (mid+K)<=N)ok = mid;else ng = mid;}ans = ok;ans -= cnt;for(auto a:mp){if(a.second==1)ans++;}}cout<<ans<<endl;return 0;}