結果
| 問題 |
No.577 Prime Powerful Numbers
|
| ユーザー |
|
| 提出日時 | 2025-04-25 22:29:23 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,594 bytes |
| コンパイル時間 | 4,044 ms |
| コンパイル使用メモリ | 257,364 KB |
| 実行使用メモリ | 7,844 KB |
| 最終ジャッジ日時 | 2025-04-25 22:29:31 |
| 合計ジャッジ時間 | 7,197 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 1 |
| other | WA * 4 OLE * 1 -- * 5 |
ソースコード
#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace std;
using namespace __gnu_pbds;
const int inf = 0x3f3f3f3f;
int P,R,A,B,C,val[35010],base,lim,ans[10],len;
gp_hash_table<int,int>M;
int Pow(int A,int B,const int P){
int res = 1;
while(B){
if(B&1){res = 1ll*A*res%P;}
A = 1ll*A*A%P;
B >>= 1;
}
return res;
}
void solve(const int P){
cin >> A >> B >> C;len = 0;
int sq = ((1ll*B*B-4ll*A*C)%P+P)%P,tmp = sq,nowti = -1;
if(sq == 0){
int PL12 = 1ll*(P-B)%P*Pow(2*A,P-2,P)%P;
cout << PL12 << "\n";
return;
}
sq = Pow(val[1],P-2,P);
for(int i = 0;i <= lim;++i){
if(M.find(tmp) != M.end()){
nowti = i*base+M[tmp];
break;
}
tmp = 1ll*tmp*sq%P;
}
if(nowti == -1||(nowti&1)){cout << "-1\n";return;}
int Mig = nowti/2,Yak = ((nowti+P-1)/2)%(P-1),JF17 = Pow(2*A,P-2,P);
Mig = Pow(R,Mig,P);Yak = Pow(R,Yak,P);
ans[++len] = 1ll*(Mig-B+P)*JF17%P;
ans[++len] = (1ll*(-Mig-B+P)*JF17%P+P)%P;
ans[++len] = 1ll*(Yak-B+P)*JF17%P;
ans[++len] = (1ll*(-Yak-B+P)*JF17%P+P)%P;
sort(ans+1,ans+1+len);len = unique(ans+1,ans+1+len)-ans-1;
for(int i = 1;i <= len;++i){cout << ans[i] << " ";}cout << "\n";
}
void init(const int P){
lim = sqrt(P)+1;
int ti = 0,va = 1;val[0] = 1;
while(ti <= lim){
val[1] = va;M[va] = base = ti;
++ti;va = 1ll*va*R%P;
}
for(int i = 2;i <= lim;++i){val[i] = 1ll*val[i-1]*val[1]%P;}
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
// freopen("equation.in","r",stdin);
// freopen("equation.out","w",stdout);
cin >> P >> R;init(P);
int T = 1;cin >> T;
for(int i = 1;i <= T;++i){solve(P);}
return 0;
}