結果
| 問題 |
No.3331 Consecutive Cubic Sum
|
| コンテスト | |
| ユーザー |
Tuchmos
|
| 提出日時 | 2025-11-14 20:17:15 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 76 ms / 5,000 ms |
| コード長 | 2,358 bytes |
| コンパイル時間 | 316 ms |
| コンパイル使用メモリ | 82,372 KB |
| 実行使用メモリ | 77,380 KB |
| 最終ジャッジ日時 | 2025-11-14 20:17:20 |
| 合計ジャッジ時間 | 4,209 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 47 |
ソースコード
###############################################################
#https://atcoder.jp/contests/abc180/submissions/70920858
import random
from math import gcd
def is_prime(n):
if n<2:
return False
prime=[2,3,5,7,11,13]
for p in prime:
if n%p==0:
return n==p
d=n-1
s=0
while d%2==0:
d//=2
s+=1
for a in [2,325,9375,28178,450775,9780504,1795265022]:
if a%n==0:
continue
x=pow(a,d,n)
if x==1 or x==n-1:
continue
for i in range(s-1):
x=x*x%n
if x==n-1:
break
else:
return False
return True
def _rho(n):
if n%2==0:
return 2
if n%3==0:
return 3
while True:
y=random.randrange(2,n-1)
c=random.randrange(1,n-1)
m=128
g=1
r=1
q=1
x=0
while g==1:
x=y
for i in range(r):
y=(y*y+c)%n
k=0
while k<r and g==1:
ys=y
for i in range(min(m,r-k)):
y=(y*y+c)%n
q=(q*(x-y)%n)%n
g=gcd(q,n)
k+=m
r<<=1
if g==n:
g=1
while g==1:
ys=(ys*ys+c)%n
g=gcd(abs(x-ys),n)
if g==1:
continue
return g
def _fac(n,lst):
if n==1:
return
if is_prime(n):
lst.append(n)
return
d=_rho(n)
_fac(d,lst)
_fac(n//d,lst)
def factors(n):
res=[]
_fac(n,res)
d={}
for p in res:
d[p]=d.get(p,0)+1
return d
def divisors(n):
pf=factors(n)
res=[1]
for p,e in pf.items():
new=[]
mul=1
for _ in range(e+1):
for v in res:
new.append(v*mul)
mul*=p
res=new
res.sort()
return res
###############################################################
from math import isqrt
N=int(input())
D=divisors(4*N)
D.reverse()
ans=[]
for m in D:
n=4*N//m
if m<n:
break
s=2*(m-n)+1
t=2*(m+n)+1
rs=isqrt(s)
rt=isqrt(t)
if rs*rs==s and rt*rt==t:
L=(1+rs)//2
R=(-1+rt)//2
ans.append((L,R))
print(len(ans))
ans.sort()
for L,R in ans:
print(L,R)
Tuchmos