結果
問題 | No.2011 Arbitrary Mod (Hidden) |
ユーザー | kaichou243 |
提出日時 | 2022-07-15 21:33:09 |
言語 | C++17 (gcc 12.3.0 + boost 1.83.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 5,076 bytes |
コンパイル時間 | 2,435 ms |
コンパイル使用メモリ | 214,076 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-06-27 17:01:34 |
合計ジャッジ時間 | 6,924 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | WA | - |
testcase_01 | WA | - |
testcase_02 | WA | - |
testcase_03 | WA | - |
testcase_04 | WA | - |
testcase_05 | AC | 2 ms
5,376 KB |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | WA | - |
testcase_13 | WA | - |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | WA | - |
testcase_17 | WA | - |
testcase_18 | AC | 3 ms
5,376 KB |
testcase_19 | WA | - |
testcase_20 | AC | 2 ms
5,376 KB |
testcase_21 | WA | - |
testcase_22 | WA | - |
testcase_23 | WA | - |
testcase_24 | WA | - |
testcase_25 | WA | - |
testcase_26 | WA | - |
testcase_27 | WA | - |
testcase_28 | WA | - |
testcase_29 | WA | - |
testcase_30 | WA | - |
testcase_31 | WA | - |
testcase_32 | WA | - |
testcase_33 | WA | - |
testcase_34 | WA | - |
testcase_35 | WA | - |
testcase_36 | WA | - |
testcase_37 | WA | - |
testcase_38 | AC | 2 ms
5,376 KB |
testcase_39 | AC | 2 ms
5,376 KB |
testcase_40 | AC | 2 ms
5,376 KB |
testcase_41 | WA | - |
testcase_42 | WA | - |
ソースコード
#include<bits/stdc++.h> using namespace std; using ll=long long; using P=pair<ll,ll>; // mod function ll mod(ll a, ll mod) { return (a%mod+mod)%mod; } ll modpow(ll a,ll n,ll mod){ ll res=1; a%=mod; while (n>0){ if (n & 1) res*=a; a *= a; a%=mod; n >>= 1; res%=mod; } return res; } vector<P> prime_factorize(ll N) { vector<P> res; for (ll a = 2; a * a <= N; ++a) { if (N % a != 0) continue; ll ex = 0; while(N % a == 0){ ++ex; N /= a; } res.push_back({a, ex}); } if (N != 1) res.push_back({N, 1}); return res; } ll modinv(ll a, ll mod) { ll b = mod, u = 1, v = 0; while (b) { ll t = a/b; a -= t * b, swap(a, b); u -= t * v, swap(u, v); } u %= mod; if (u < 0) u += mod; return u; } ll extGcd(ll a, ll b, ll &p, ll &q) { if (b == 0) { p = 1; q = 0; return a; } ll d = extGcd(b, a%b, q, p); q -= a/b * p; return d; } P ChineseRem(const vector<ll> &b, const vector<ll> &m) { ll r = 0, M = 1; for (int i = 0; i < (int)b.size(); ++i) { ll p, q; ll d = extGcd(M, m[i], p, q); if ((b[i] - r) % d != 0) return make_pair(0, -1); ll tmp = (b[i] - r) / d * p % (m[i]/d); r += M * tmp; M *= m[i]/d; } return make_pair(mod(r, M), M); } template<int m> struct Comb{ unordered_map<int,tuple<ll,vector<ll>,vector<ll>>> mp; int n_; ll p_, pm_; vector<ll> ord_, fact_; vector<P> pf; Comb(int n) : n_(n), ord_(n), fact_(n){ pf=prime_factorize(m); COMinit(); } void init(int n) { ord_.resize(n); fact_.resize(n); } void init(long long p, long long pm) { p_=p,pm_=pm; ord_[0]=ord_[1]=0; fact_[0]=fact_[1]=1; auto&[pms,ord,fac]=mp[p]; pms=pm; ord.resize(n_); fac.resize(n_); ord[0]=ord[1]=0; fac[0]=fac[1]=1; for (int i=2;i<n_;i++) { long long add=0; long long ni=i; while (ni % p == 0) add++,ni/=p; ord_[i]=ord_[i-1]+add; fact_[i]=fact_[ni-1]*ni%pm; ord[i]=ord_[i]; fac[i]=fact_[i]; } } void init(long long p, long long pm, int n) { init(n); init(p, pm); } void COMinit(){ for(auto p : pf){ ll ps=p.first,pfs=pow(p.first,p.second); init(n_); init(ps,pfs); } } ll com(ll n, ll r,int p) { if (n<0 || r<0 || n<r) return 0; auto&[pms,ord,fac]=mp[p]; ll e=ord[n]-ord[r]-ord[n-r]; ll res=fac[n]*modinv(fac[r]*fac[n-r]%pms,pms)%pms; res=res*modpow(p,e,pms)%pms; return res; } ll operator()(int n, int k){ if(n<0 || k<0 || n<k) return 0; int sz=pf.size(); vector<long long> vb(sz), vm(sz); for (int i=0;i<sz;i++) { long long p = pf[i].first, e = pf[i].second; long long pm = pow(p,e); long long b = 1; b *= com(n, k ,p) % pm; b %= pm; vm[i]=pm; vb[i]=b; } auto res = ChineseRem(vb,vm); return res.first; } }; template<int m> struct Perm{ unordered_map<int,tuple<ll,vector<ll>,vector<ll>>> mp; int n_; ll p_, pm_; vector<ll> ord_, fact_; vector<P> pf; Perm(int n) : n_(n), ord_(n), fact_(n) { pf=prime_factorize(m); PERMinit(); } void init(int n) { ord_.resize(n); fact_.resize(n); } void init(long long p, long long pm) { p_=p,pm_=pm; ord_[0]=ord_[1]=0; fact_[0]=fact_[1]=1; auto&[pms,ord,fac]=mp[p]; pms=pm; ord.resize(n_); fac.resize(n_); ord[0]=ord[1]=0; fac[0]=fac[1]=1; for (int i=2;i<n_;i++) { long long add=0; long long ni=i; while (ni % p == 0) add++,ni/=p; ord_[i]=ord_[i-1]+add; fact_[i]=fact_[ni-1]*ni%pm; ord[i]=ord_[i]; fac[i]=fact_[i]; } } void init(long long p, long long pm, int n) { init(n); init(p, pm); } void PERMinit(){ for(auto p : pf){ ll ps=p.first,pfs=pow(p.first,p.second); init(n_); init(ps,pfs); } } ll perm(ll n, ll r,int p) { if (n<0 || r<0 || n<r) return 0; auto&[pms,ord,fac]=mp[p]; ll e=ord[n]-ord[n-r]; ll res=fac[n]*modinv(fac[n-r]%pms,pms)%pms; res=res*modpow(p,e,pms)%pms; return res; } ll operator()(int n, int k){ if(n<0 || k<0 || n<k) return 0; vector<long long> vb, vm; for (auto ps : pf) { long long p = ps.first, e = ps.second; long long pm = pow(p,e); long long b = 1; b *= perm(n, k ,p) % pm; b %= pm; vm.push_back(pm); vb.push_back(b); } auto res = ChineseRem(vb,vm); return res.first; } }; vector<ll> enum_divisors(ll N){ vector<ll> res; for (ll i = 1; i * i <= N; ++i){ if (N % i == 0){ res.push_back(i); // 重複しないならば i の相方である N/i も push if (N/i != i) res.push_back(N/i); } } // 小さい順に並び替える sort(res.begin(), res.end()); return res; } int main(){ ll n; cin>>n; vector<ll> d=enum_divisors(n); ll expo=0; for(auto e:d){ if(e<60&&e>=24) expo=e; } cout<<(1ll<<expo)<<endl; cout<<1<<endl; }