結果
問題 | No.186 中華風 (Easy) |
ユーザー |
![]() |
提出日時 | 2016-04-28 00:38:10 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 71 ms / 2,000 ms |
コード長 | 2,005 bytes |
コンパイル時間 | 1,490 ms |
コンパイル使用メモリ | 168,964 KB |
実行使用メモリ | 12,248 KB |
最終ジャッジ日時 | 2024-07-19 18:27:51 |
合計ジャッジ時間 | 2,994 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 23 |
ソースコード
#include<bits/stdc++.h> using namespace std; #define int long long typedef pair<int,int>pint; typedef vector<int>vint; typedef vector<pint>vpint; #define pb push_back #define mp make_pair #define fi first #define se second #define all(v) (v).begin(),(v).end() #define rep(i,n) for(int i=0;i<(n);i++) #define reps(i,f,n) for(int i=(f);i<(n);i++) #define each(it,v) for(__typeof((v).begin()) it=(v).begin();it!=(v).end();it++) template<class T,class U>inline void chmin(T &t,U f){if(t>f)t=f;} template<class T,class U>inline void chmax(T &t,U f){if(t<f)t=f;} int gcd(int a,int b){ return b?gcd(b,a%b):a; } //a*x-m*k=1 int extgcd(int a,int b,int &x,int &y){ if(b==0){ x=1; y=0; return a; } int g=extgcd(b,a%b,y,x); y-=a/b*x; return a; return g; } int X[3],Y[3]; vint get_prime(){ vint f(1000000,1); vint prime; f[0]=f[1]=0; for(int i=2;i<1000000;i++){ if(!f[i])continue; prime.pb(i); for(int j=i+i;j<1000000;j+=i)f[j]=0; } return prime; } signed main(){ rep(i,3)cin>>X[i]>>Y[i]; map<int,int>M; vint prime=get_prime(); for(int p:prime){ vint table(25,-1); rep(i,3){ int t=1,c=0; while(Y[i]%t==0){ if(table[c]==-1)table[c]=X[i]%t; else if(table[c]!=X[i]%t){ cout<<-1<<endl; return 0; } t*=p; c++; } } int t=1,c=0; while(table[c]!=-1){ t*=p; c++; } if(c>1)M[t/p]=table[c-1]; } int ans=0; int m=1; each(i,M)m*=i->fi; each(i,M){ int a=1; each(j,M){ if(i->fi!=j->fi)a*=j->fi; } int inv,tmp; extgcd(a,i->fi,inv,tmp); inv=(inv+i->fi*i->fi)%i->fi; rep(j,i->se)ans=(ans+a*inv)%m; } ans%=m; if(ans==0)cout<<m<<endl; else cout<<ans<<endl; return 0; }