結果
問題 | No.1409 Simple Math in yukicoder |
ユーザー |
![]() |
提出日時 | 2021-02-26 22:45:13 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 35 ms / 2,000 ms |
コード長 | 3,072 bytes |
コンパイル時間 | 2,188 ms |
コンパイル使用メモリ | 208,708 KB |
最終ジャッジ日時 | 2025-01-19 06:22:13 |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 58 |
ソースコード
#include <bits/stdc++.h>using namespace std;using Int = long long;const char newl = '\n';template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;}template<typename T> void drop(const T &x){cout<<x<<endl;exit(0);}template<typename T=int>vector<T> read(size_t n){vector<T> ts(n);for(size_t i=0;i<n;i++) cin>>ts[i];return ts;}// MOD can be composite numberstemplate<typename T>T mod_pow(T a,long long n,const T MOD){using ll = long long;T res(1);while(n){if(n&1) res=(ll)res*a%MOD;a=(ll)a*a%MOD;n>>=1;}return res;}// mod can be composite numberstemplate<typename T>T order(T x,const T MOD){static map<T, vector<T>> dp;static map<T, T> phi;vector<T> &ps=dp[MOD];if(ps.empty()){T res=MOD,n=MOD;for(T i=2;i*i<=n;i++){if(n%i) continue;while(n%i==0) n/=i;res=res/i*(i-1);}if(n!=1) res=res/n*(n-1);phi[MOD]=res;for(T i=2;i*i<=res;i++){if(res%i) continue;while(res%i==0) res/=i;ps.emplace_back(i);}if(res!=1) ps.emplace_back(res);}T res=phi[MOD];for(T p:ps){while(res%p==0){if(mod_pow(x,res/p,MOD)!=1) break;res/=p;}}return res;}template<typename T>struct Rint{static T mod;static void set_mod(T nmod){mod=nmod;}T v;Rint():v(0){}Rint(signed v):v(v){}Rint(long long t){v=t%mod;if(v<0) v+=mod;}Rint pow(long long k){Rint res(1),tmp(v);while(k){if(k&1) res*=tmp;tmp*=tmp;k>>=1;}return res;}static Rint add_identity(){return Rint(0);}static Rint mul_identity(){return Rint(1);}Rint inv(){return pow(mod-2);}Rint& operator+=(Rint a){v+=a.v;if(v>=mod)v-=mod;return *this;}Rint& operator-=(Rint a){v+=mod-a.v;if(v>=mod)v-=mod;return *this;}Rint& operator*=(Rint a){v=1LL*v*a.v%mod;return *this;}Rint& operator/=(Rint a){return (*this)*=a.inv();}Rint operator+(Rint a) const{return Rint(v)+=a;}Rint operator-(Rint a) const{return Rint(v)-=a;}Rint operator*(Rint a) const{return Rint(v)*=a;}Rint operator/(Rint a) const{return Rint(v)/=a;}Rint operator-() const{return v?Rint(mod-v):Rint(v);}bool operator==(const Rint a)const{return v==a.v;}bool operator!=(const Rint a)const{return v!=a.v;}bool operator <(const Rint a)const{return v <a.v;}};template<typename T> T Rint<T>::mod;template<typename T>ostream& operator<<(ostream &os,Rint<T> m){os<<m.v;return os;}//INSERT ABOVE HEREsigned main(){cin.tie(0);ios::sync_with_stdio(0);int T;cin>>T;while(T--){int v,x;cin>>v>>x;const int mod=v*x+1;using R = Rint<int>;R::set_mod(mod);int r=2;while(order(r,mod)!=mod-1) r++;r=R(r).pow(v).v;vector<int> as;for(int i=0;i<x;i++)as.emplace_back(R(r).pow(i).v);sort(as.begin(),as.end());for(int i=0;i<x;i++){if(i) cout<<' ';cout<<as[i];}cout<<newl;}return 0;}