結果

問題 No.3022 一元一次式 mod 1000000000
ユーザー ococonomy1
提出日時 2025-02-18 17:08:37
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 158 ms / 2,000 ms
コード長 3,563 bytes
コンパイル時間 1,838 ms
コンパイル使用メモリ 198,924 KB
実行使用メモリ 5,248 KB
最終ジャッジ日時 2025-02-18 17:08:41
合計ジャッジ時間 3,077 ms
ジャッジサーバーID
(参考情報)
judge5 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 21
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

//#pragma GCC target("avx2")
//#pragma GCC optimize("O3")
//#pragma GCC optimize("unroll-loops")
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int,int>;
using pll = pair<ll,ll>;
using pli = pair<ll,int>;
#define TEST cerr << "TEST" << endl
#define AMARI 998244353
//#define AMARI 1000000007
#define el '\n'
#define El '\n'
#define YESNO(x) ((x) ? "Yes" : "No")
#define VEC_UNIQ(v) sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end());
#define REV_PRIORITY_QUEUE(tp) priority_queue<tp,vector<tp>,greater<tp>>
//ax + by == gcd(a,b)
// gcd x,y x,y
//max(absX,absY) <= max(absA,absB)
long long ococo_extgcd(long long a, long long b, long long &x,long long &y){
if(abs(a) < abs(b)) {
swap(a,b);
swap(x,y);
}
if(!b){
x = 1; y = 0;
return a;
}
ll ans = ococo_extgcd(b,a % b,x,y);
ll temp = x;
x = y;
y = temp - (a / b) * y;
return ans;
}
// N
//O(sqrt(N)) O(log())
// log static map<ll,ll> mp;
ll ococo_totient(ll n){
static map<ll,ll> mp;
if(n == 1)return 1LL;
if(mp.find(n) != mp.end())return mp[n];
ll ans = 1;
for(ll i = 2LL; i * i <= n; i++){
bool first = true;
while(n % i == 0){
n /= i;
if(first)ans *= (i - 1);
else ans *= i;
first = false;
}
}
if(n != 1)ans *= (n - 1);
return mp[n] = ans;
}
ll beki(ll a,ll b,ll md){
ll ans = 1,temp = a % md;
while(b){
if(b % 2){
ans *= temp;
ans %= md;
}
temp *= temp;
temp %= md;
b /= 2;
}
return ans;
}
#define MULTI_TEST_CASE true
void solve(void){
//
//
//
//
//
//g++ -D_GLIBCXX_DEBUG -O2 XXX.cpp -o o
ll n,m;
cin >> n >> m;
ll md = 1000000000LL;
n %= md; m %= md;
if(n == 0){
cout << (m == 0 ? 1 : -1) << el;
return;
}
ll x,y;
ll g = ococo_extgcd(n,m,x,y);
g = ococo_extgcd(g,md,x,y);
n /= g;
m /= g;
md /= g;
//(n,m,md) gcd 1
if(ococo_extgcd(n,md,x,y) != 1){
cout << -1 << el;
return;
}
//cerr << n << ' ' << m << ' ' << md << el;
ll phi = ococo_totient(md);
ll ans = (md - m) % md;
ans *= beki(n,phi - 1,md); ans %= md;
if(ans == 0)ans += md;
cout << ans << el;
return;
}
void calc(void){
return;
}
signed main(void){
cin.tie(nullptr);
ios::sync_with_stdio(false);
calc();
int t = 1;
if(MULTI_TEST_CASE)cin >> t;
while(t--){
solve();
}
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0