結果
問題 | No.187 中華風 (Hard) |
ユーザー |
👑 ![]() |
提出日時 | 2020-10-12 04:41:36 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 3,156 bytes |
コンパイル時間 | 164 ms |
コンパイル使用メモリ | 82,176 KB |
実行使用メモリ | 66,176 KB |
最終ジャッジ日時 | 2024-07-20 17:53:37 |
合計ジャッジ時間 | 2,608 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 4 RE * 21 |
ソースコード
class Modulo_Error(Exception):passclass Modulo():def __init__(self,a,n):self.a=a%nself.n=ndef __str__(self):return "{} (mod {})".format(self.a,self.n)#+,-def __pos__(self):return selfdef __neg__(self):return Modulo(-self.a,self.n)#等号,不等号def __eq__(self,other):if isinstance(other,Modulo):return (self.a==other.a) and (self.n==other.n)elif isinstance(other,int):return (self-other).a==0def __neq__(self,other):return not(self==other)#加法def __add__(self,other):if isinstance(other,Modulo):if self.n!=other.n:raise Modulo_Error("異なる法同士の演算です.")return Modulo(self.a+other.a,self.n)elif isinstance(other,int):return Modulo(self.a+other,self.n)def __radd__(self,other):if isinstance(other,int):return Modulo(self.a+other,self.n)#減法def __sub__(self,other):return self+(-other)def __rsub__(self,other):if isinstance(other,int):return -self+other#乗法def __mul__(self,other):if isinstance(other,Modulo):if self.n!=other.n:raise Modulo_Error("異なる法同士の演算です.")return Modulo(self.a*other.a,self.n)elif isinstance(other,int):return Modulo(self.a*other,self.n)def __rmul__(self,other):if isinstance(other,int):return Modulo(self.a*other,self.n)#Modulo逆数def inverse(self):return self.Modulo_Inverse()def Modulo_Inverse(self):x0, y0, x1, y1 = 1, 0, 0, 1a,b=self.a,self.nwhile b != 0:q, a, b = a // b, b, a % bx0, x1 = x1, x0 - q * x1y0, y1 = y1, y0 - q * y1if a!=1:raise Modulo_Error("{}の逆数が存在しません".format(self))else:return Modulo(x0,self.n)#除法def __truediv__(self,other):return self*(other.Modulo_Inverse())def __rtruediv__(self,other):return other*(self.Modulo_Inverse())#累乗def __pow__(self,m):u=abs(m)r=Modulo(pow(self.a,m,self.n),self.n)if m>=0:return relse:return r.Modulo_Inverse()#法の合成def __modulo_composite__(p,q):from math import gcda,n=p.a,p.nb,m=q.a,q.nd=b-ag=gcd(n,m)if d%g:raise Modulo_Error("{}と{}は両立しません.".format(p,q))n//=gm//=gd//=gs=(Modulo(1,m)/Modulo(n,m)).areturn Modulo(a+(n*g)*d*s,n*m*g)def Modulo_Composite(*X):from functools import reducereturn reduce(__modulo_composite__,X)#================================================N=int(input())Mod=10**9+7C=[0]*Nfor k in range(3):A,M=map(int,input().split())C[k]=Modulo(A,M)try:E=Modulo_Composite(*C)if E.a==0:print(E.n%Mod)else:print(E.a%Mod)except Modulo_Error:print(-1)