結果
問題 | No.2193 メガの下1桁 |
ユーザー |
![]() |
提出日時 | 2023-01-13 22:46:33 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,990 bytes |
コンパイル時間 | 2,502 ms |
コンパイル使用メモリ | 219,240 KB |
最終ジャッジ日時 | 2025-02-10 02:58:12 |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 35 WA * 5 |
ソースコード
#include<bits/stdc++.h>#include<atcoder/math.hpp>using namespace std;using ll=long long;#define rep(i,n) for(int i=0;i<(n);++i)vector<vector<long long>> make_mat(vector<long long> v){if(v.empty())return vector<vector<long long>>(1,vector<long long>());long long n=v.back();v.pop_back();vector<vector<long long>> ret;vector<vector<long long>> tmp=make_mat(v);for(auto e:tmp)for(long long i=0;i<n;++i){ret.push_back(e);ret.back().push_back(i);}return ret;}ll euler_phi(ll n) {ll ret = n;for(ll i = 2; i * i <= n; i++) {if(n % i == 0) {ret -= ret / i;while(n % i == 0) n /= i;}}if(n > 1) ret -= ret / n;return ret;}int main(){ll m,d,n,b;cin>>m>>d>>n>>b;vector<ll>phi=vector{b};while(phi.back()!=1){phi.emplace_back(euler_phi(phi.back()));}auto mul=[&](vector<ll>v){vector<ll>res(phi.size());rep(i,phi.size()-1){ll tmp=1,k=v[i]+d;if(k>=phi[i]*2)k=k%phi[i]+phi[i];bool over=0;rep(j,v[i+1]){tmp*=k;if(tmp>=phi[i]*2)tmp=tmp%phi[i]+phi[i];}res[i]=tmp;}res.back()=1;return res;};auto tb=phi;rep(i,phi.size())tb[i]*=2;map<vector<ll>,vector<ll>>ma;for(auto v:make_mat(tb)){ma[v]=mul(v);}vector<ll>v(phi.size());rep(i,phi.size()){v[i]=m%phi[i]+(m>=phi[i]?phi[i]:0);}auto ans=v;// cerr<<n<<endl;// rep(i,phi.size())cerr<<phi[i]<<ans[i]<<" \n"[i==phi.size()-1];while(n){if(n%2){ans=ma[ans];// rep(i,phi.size())cerr<<phi[i]<<ans[i]<<" \n"[i==phi.size()-1];}map<vector<ll>,vector<ll>>ma2;for(auto [s,t]:ma){ma2[s]=mul(t);}n/=2;swap(ma,ma2);}if(ans[0]%b==10)cout<<"A"<<endl;else cout<<ans[0]%b<<endl;}