結果
| 問題 |
No.3360 平方根の整数倍の整数部分
|
| コンテスト | |
| ユーザー |
回転
|
| 提出日時 | 2025-11-15 00:34:29 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,590 bytes |
| コンパイル時間 | 247 ms |
| コンパイル使用メモリ | 82,084 KB |
| 実行使用メモリ | 54,092 KB |
| 最終ジャッジ日時 | 2025-11-15 00:34:32 |
| 合計ジャッジ時間 | 2,915 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 37 WA * 1 |
ソースコード
# generated by AI
# Python 3 解法
import sys
from math import isqrt
def solve():
data = sys.stdin.read().strip().split()
if not data:
return
N = int(data[0]); M = int(data[1])
if N == 1:
print("NaN")
return
s = isqrt(N)
if s * s == N:
# 完全平方数の場合:答えは M + floor((M-1)/(s-1))
if s == 1:
# 既に N==1 のケースで除外済みだが安全のため
print("NaN")
return
ans = M + (M - 1) // (s - 1)
print(ans)
return
# N が完全平方でない場合(√N は無理数)
# 二分探索で最小の x を求める: good(x) >= M
# 上限の見積もり: beta = sqrt(N)/(sqrt(N)-1) が最大となるのは N=2 あたりで
# M が最大 1e6 なので 3*M + margin を上限とする(十分余裕あり)
lo = 1
hi = 3 * M + 100 # 安全マージン
def good_count(x):
# bad = 最大の m >=0 で m^2 * N < (x+1)^2
# つまり m^2 <= ((x+1)^2 - 1) // N
t = (x + 1)
# compute ((x+1)^2 - 1) // N safely with big ints
numerator = t * t - 1
q = numerator // N
bad = isqrt(q)
return x - bad
# 二分探索(最小の x with good_count(x) >= M)
ans = -1
while lo <= hi:
mid = (lo + hi) // 2
if good_count(mid) >= M:
ans = mid
hi = mid - 1
else:
lo = mid + 1
if ans == -1:
print("NaN")
else:
print(ans)
if __name__ == "__main__":
solve()
回転