結果
問題 |
No.308 素数は通れません
|
ユーザー |
![]() |
提出日時 | 2015-12-01 01:58:02 |
言語 | Python2 (2.7.18) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,047 bytes |
コンパイル時間 | 57 ms |
コンパイル使用メモリ | 6,912 KB |
実行使用メモリ | 15,004 KB |
最終ジャッジ日時 | 2024-09-14 06:12:57 |
合計ジャッジ時間 | 6,100 ms |
ジャッジサーバーID (参考情報) |
judge6 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 1 WA * 60 TLE * 2 -- * 44 |
ソースコード
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()) print multOrder(4, 2*n+1) # 100 # for i in range(25): # print multOrder(4, 2*i+1)