結果
| 問題 |
No.1728 [Cherry 3rd Tune] Bullet
|
| コンテスト | |
| ユーザー |
👑 Kazun
|
| 提出日時 | 2021-08-17 04:01:32 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 97 ms / 2,000 ms |
| コード長 | 1,452 bytes |
| コンパイル時間 | 943 ms |
| コンパイル使用メモリ | 90,388 KB |
| 実行使用メモリ | 5,248 KB |
| 最終ジャッジ日時 | 2024-10-07 08:49:40 |
| 合計ジャッジ時間 | 2,014 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 27 |
ソースコード
#include<iostream>
#include<algorithm>
#include<vector>
#include<unordered_map>
using namespace std;
using ll=long long;
vector<int> Divisors(int N){
vector<int> D;
int k=1;
while (k*k<=N){
if (N%k==0){
D.push_back(k);
if (k*k!=N){
D.push_back(N/k);
}
}
k++;
}
sort(D.begin(),D.end(),greater<int>());
return D;
}
ll pow_mod(ll a, ll p, ll m){
ll x=1;
while (p){
if (p&1){
x*=a;
x%=m;
}
a*=a; a%=m;
p>>=1;
}
return x;
}
int main(){
int T=0; cin >> T;
ll mod=1000000007;
int N,C;
vector<int> D;
int M,d,e,m,g;
ll A,B,X;
unordered_map<int, ll> H;
for (int t=0; t<T; t++){
cin >> N >> C;
//gcd(N,x) の分布を調べる.
D=Divisors(N);
M=D.size();
H.clear();
for (int i=0; i<M; i++){
d=D[i];
H[d]=N/d;
for (int j=0; j<i; j++){
e=D[j];
if (e%d==0) H[d]-=H[e];
}
}
// σ^k 型の計算
A=0;
for (int i=0; i<M; i++){
g=D[i]; m=2*g;
A+=H[g]*pow_mod(C,m,mod);
A%=mod;
}
// τ σ^k 型の計算
B=N*pow_mod(C,N,mod);
B%=mod;
X=(A+B)*pow_mod(2*N,mod-2,mod);
X%=mod;
cout << X << endl;
}
}
Kazun