結果
| 問題 |
No.1274 楽しい格子点
|
| コンテスト | |
| ユーザー |
👑 Kazun
|
| 提出日時 | 2020-10-30 22:28:09 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 3,800 bytes |
| コンパイル時間 | 228 ms |
| コンパイル使用メモリ | 81,920 KB |
| 実行使用メモリ | 66,304 KB |
| 最終ジャッジ日時 | 2024-07-22 01:41:26 |
| 合計ジャッジ時間 | 4,733 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | RE * 1 |
| other | AC * 11 RE * 46 |
ソースコード
class Gaussian_Integer():
#入力定義
def __init__(self,Real_part=0,Imaginary_part=0):
self.re=Real_part
self.im=Imaginary_part
#表示定義
def __str__(self):
s=""
s=Gaussian_Integer.__strmake(s,self.re,"")
s=Gaussian_Integer.__strmake(s,self.im,"i")
if s=="":
return "0"
else:
return s
def __strmake(self,coefficient,axis):
if coefficient==0:
return self
else:
if self=="":
if axis=="":
self+=str(coefficient)
else:
if coefficient==1:self+=axis
elif coefficient==-1:self+="-"+axis
else:self+=str(coefficient)+axis
else:
if coefficient>0:
if coefficient==1:self+="+"+axis
else:self+="+"+str(coefficient)+axis
else:
if coefficient==-1:self+="-"+axis
else:self+=str(coefficient)+axis
return self
#四則演算定義
#加法
def __add__(self,other):
if isinstance(other,Gaussian_Integer):
return Gaussian_Integer(self.re+other.re,self.im+other.im)
else:
return Gaussian_Integer(self.re+other,self.im)
def __radd__(self,other):
if isinstance(other,int):
return Gaussian_Integer(self.re+other,self.im)
#減法
def __sub__(self,other):
return self+(-other)
def __rsub__(self,other):
if isinstance(other,int):
return (-self)+other
#乗法
def __mul__(self,other):
a,b=self.re,self.im
if isinstance(other,Gaussian_Integer):
c,d=other.re,other.im
return Gaussian_Integer(a*c-b*d,a*d+b*c)
else:
return Gaussian_Integer(other*a,other*b)
def __rmul__(self,other):
if isinstance(other,int):
a,b=self.re,self.im
return Gaussian_Integer(other*a,other*b)
#除法
def __truediv__(self,other):
pass
def __rtruediv__(self,other):
pass
def __floordiv__(self,other):
if isinstance(other,int):
other=Gaussian_Integer(other,0)
a,b=self.re,self.im
c,d=other.re,other.im
n=other.norm()
p=(2*(a*c+b*d)+n)//(2*n)
q=(2*(b*c-a*d)+n)//(2*n)
return Gaussian_Integer(p,q)
def __mod__(self,other):
return self-other*(self//other)
#比較演算子
def __eq__(self,other):
if isinstance(other,Gaussian_Integer):
return (self.re==other.re) and (self.im==other.im)
else:
return (self-other)==Gaussian_Integer(0,0)
def __bool__(self):
return not(self==0)
#その他
def conjugate(self):
return Gaussian_Integer(self.re,-self.im)
def __abs__(self):
import math
return math.sqrt(self.norm())
def norm(self):
return self.re*self.re+self.im*self.im
#実数から複素数に変換
def Real_to_Complex(self):
pass
#正負判定
#要約
#逆数
def __inverse(self):
pass
#符号
def __pos__(self):
return self
def __neg__(self):
return Gaussian_Integer(-self.re,-self.im)
#最大公約数
def gcd(x,y):
"""Gauss整数 x,yの最大公約数を求める.
x,y:Gauss整数
"""
if x.norm()<y.norm():
x,y=y,x
while y!=0:
x,y=y,x%y
return x
#================================================
A,B=map(int,input().split())
alpha=Gaussian_Integer(A,B)
beta =alpha.conjugate()
gamma=gcd(alpha,beta)
if alpha==0:
print(0.25)
assert Gaussian_Integer(1,0)%gamma==0
print(0.3371877158)
Kazun