結果
| 問題 |
No.1158 GCD Products easy
|
| ユーザー |
tonegawa
|
| 提出日時 | 2020-08-15 12:44:42 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 2,000 ms |
| コード長 | 715 bytes |
| コンパイル時間 | 852 ms |
| コンパイル使用メモリ | 72,424 KB |
| 最終ジャッジ日時 | 2025-01-13 01:23:09 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 25 |
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:21:8: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
21 | scanf("%lld %lld %lld", &a, &b, &n);
| ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <iostream>
#include <vector>
#define vll vector<ll>
using namespace std;
typedef long long int ll;
#define P 1000000007
#define Q 1000000006
inline ll mpow(ll a, ll x, ll p){
ll ret = 1, num = a;
for(;x;){
if(x&1) ret = (ret*num)%p;
num=(num*num)%p;
x>>=1;
}
return ret;
}
int main() {
ll a, b, n, ans = 1;
scanf("%lld %lld %lld", &a, &b, &n);
a--;
vector<bool> pm(b+1, 1);
for(ll i=2;i<=b;i++){
if(!pm[i]) continue;
for(ll j=i*i;j<=b;j+=i) pm[j] = 0;
}
for(int g=2;g<=b;g++){
if(!pm[g]) continue;
ll y = g;
while(y<=b){
ll num = mpow(b/y-a/y, n, P-1);
ans = (ans * mpow(g, num, P))%P;
y *= g;
}
}
printf("%lld\n", ans);
}
tonegawa