結果

問題 No.2280 FizzBuzz Difference
ユーザー shobonvip
提出日時 2023-04-21 23:09:00
言語 PyPy3
(7.3.15)
結果
AC  
実行時間 160 ms / 2,000 ms
コード長 3,247 bytes
コンパイル時間 472 ms
コンパイル使用メモリ 82,056 KB
実行使用メモリ 78,240 KB
最終ジャッジ日時 2024-11-06 16:34:44
合計ジャッジ時間 1,747 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 7
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

# lcm(a,b)
# 0, 3, 6, 9, 12, 15,
# 0, 5, 10, 15,
# 3/2/1/3/1/2/3
# 0, 3, 6, 9, 12, 15, 18, 21
# 0, 7, 14, 21
# 3/3/1/2/3/2/1/3/3
# 0, 5, 10, 15, 20, 25, 30, 35
# 0, 7, 14, 21, 28, 35
# 5 / 2 / 3 / 4 / 1 / 5 / 1 / 4 / 3 / 2 / 5
# 1-4 ... 2 5 ... 3
# 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55
# 0, 11, 22, 33, 44, 55
# 5 / 5 / 1 / 4 / 5 / 2 / 3 / 5 / 3 / 2 / 5 / 4 / 1 / 5 / 5
# 1-4... 2 , 5 ... (+1)
# 0, 2, 4, 6
# 0, 3, 6
# 2/1/1/2
import os
import sys
from io import BytesIO, IOBase
BUFSIZE = 8192
class FastIO(IOBase):
newlines = 0
def __init__(self, file):
self._fd = file.fileno()
self.buffer = BytesIO()
self.writable = "x" in file.mode or "r" not in file.mode
self.write = self.buffer.write if self.writable else None
def read(self):
while True:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
if not b:
break
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines = 0
return self.buffer.read()
def readline(self):
while self.newlines == 0:
b = os.read(self._fd, max(os.fstat(self._fd).st_size, BUFSIZE))
self.newlines = b.count(b"\n")+(not b)
ptr = self.buffer.tell()
self.buffer.seek(0, 2), self.buffer.write(b), self.buffer.seek(ptr)
self.newlines -= 1
return self.buffer.readline()
def flush(self):
if self.writable:
os.write(self._fd, self.buffer.getvalue())
self.buffer.truncate(0), self.buffer.seek(0)
class IOWrapper(IOBase):
def __init__(self, file):
self.buffer = FastIO(file)
self.flush = self.buffer.flush
self.writable = self.buffer.writable
self.write = lambda s:self.buffer.write(s.encode("ascii"))
self.read = lambda:self.buffer.read().decode("ascii")
self.readline = lambda:self.buffer.readline().decode("ascii")
sys.stdin, sys.stdout = IOWrapper(sys.stdin), IOWrapper(sys.stdout)
input = lambda:sys.stdin.readline().rstrip("\r\n")
from math import gcd
def xgcd(a,b):
prevx, nextx = 1, 0
prevy, nexty = 0, 1
while b:
quotient = a//b
nextx, prevx = prevx - quotient * nextx, nextx
nexty, prevy = prevy - quotient * nexty, nexty
a, b = b, a % b
return prevx, prevy
def naive(m,a,b,k):
t = -10**18
ans = 0
for i in range(1, m+1):
if i%a == 0 or i%b == 0:
if i-t==k:
ans += 1
t = i
return ans
def fast(m,a,b,k):
ret = 0
if k == a:
tmp = m//a
ret += tmp - tmp*a//b
return ret
else:
x,y = xgcd(a,b)
x*=k; y*=k
r1 = x*a%(a*b)
r2 = -y*b%(a*b)
if r1 < r2:
if r2 <= m:
ret += 1
else:
if r1 <= m:
ret += 1
r1 = -x*a%(a*b)
r2 = y*b%(a*b)
if r1 < r2:
if r2 <= m:
ret += 1
else:
if r1 <= m:
ret += 1
return ret
T = int(input())
for _ in range(T):
m,a,b,k = map(int,input().split())
#print(naive(m,a,b,k))
if a>b: a,b = b,a
g = gcd(a,b)
if k % g != 0:
print(0)
continue
a//=g
b//=g
m//=g
k//=g
# gcd(a,b) == 1
l = a*b
if k > a:
print(0)
continue
if a==1:
print(max(0, m-1))
continue
r = m//l
ans = 0
m %= l
if k==a:
ans = (b-a+1)*r - 1
elif k<a:
ans = 2*r
ans += fast(m,a,b,k)
print(max(0,ans))
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0