結果

問題 No.308 素数は通れません
ユーザー fmhr
提出日時 2015-12-01 01:56:03
言語 Python2
(2.7.18)
結果
WA  
実行時間 -
コード長 1,050 bytes
コンパイル時間 159 ms
コンパイル使用メモリ 6,944 KB
実行使用メモリ 15,008 KB
最終ジャッジ日時 2024-09-14 06:12:04
合計ジャッジ時間 4,668 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 5 WA * 56 TLE * 1 -- * 45
権限があれば一括ダウンロードができます

ソースコード

diff #

def gcd(a, b):
		while b != 0:
				a, b = b, a % b
		return a

def lcm(a, b):
		return (a*b) / gcd(a, b)

def isPrime(p):
		return (p > 1) and all(f == p for f,e in factored(p))

primeList = [2,3,5,7]
def primes():
		for p in primeList:
				yield p
		while 1:
				p += 2
				while not isPrime(p):
						p += 2
				primeList.append(p)
				yield p

def factored(a):
		for p in primes():
				j = 0
				while a%p == 0:
						a /= p
						j += 1
				if j > 0:
						yield (p,j)
				if a < p*p: break
		if a > 1:
				yield (a,1)


def multOrdr1(a,(p,e) ):
		m = p**e
		t = (p-1)*(p**(e-1)) #  = Phi(p**e) where p prime
		qs = [1,]
		for f in factored(t):
				qs = [ q * f[0]**j for j in range(1+f[1]) for q in qs ]
		qs.sort()

		for q in qs:
				if pow( a, q, m )==1: break
		return q


def multOrder(a,m):
		assert gcd(a,m) == 1
		mofs = (multOrdr1(a,r) for r in factored(m))
		return reduce(lcm, mofs, 1)


if __name__ == "__main__":
		n = int(raw_input())-1
		print multOrder(4, 2*n+1)        # 100
#		for i in range(25):
#			print multOrder(4, 2*i+1)
0