結果

問題 No.2280 FizzBuzz Difference
ユーザー square1001square1001
提出日時 2023-04-21 21:46:07
言語 Python3
(3.12.2 + numpy 1.26.4 + scipy 1.12.0)
結果
AC  
実行時間 182 ms / 2,000 ms
コード長 881 bytes
コンパイル時間 268 ms
コンパイル使用メモリ 12,544 KB
実行使用メモリ 10,880 KB
最終ジャッジ日時 2024-11-06 15:15:23
合計ジャッジ時間 2,002 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)

テストケース

テストケース表示
入力 結果 実行時間
実行使用メモリ
testcase_00 AC 31 ms
10,752 KB
testcase_01 AC 145 ms
10,880 KB
testcase_02 AC 160 ms
10,880 KB
testcase_03 AC 113 ms
10,880 KB
testcase_04 AC 182 ms
10,880 KB
testcase_05 AC 147 ms
10,880 KB
testcase_06 AC 153 ms
10,880 KB
testcase_07 AC 150 ms
10,880 KB
権限があれば一括ダウンロードができます

ソースコード

diff #

import math

# extended GCD algorithm
# from: https://onlinejudge.u-aizu.ac.jp/solutions/problem/NTL_1_E/review/6080963/lloyz_nt/Python3
def rec_gcd(a, b):
	if b == 0:
		return a, 1, 0
	d, y, x = rec_gcd(b, a % b)
	y -= a // b * x
	return d, x, y

def solve(m, a, b, k):
	g = math.gcd(a, b)
	if g != 1:
		if k % g != 0:
			return 0
		return solve(m // g, a // g, b // g, k // g)
	if k > a:
		return 0
	if k == a:
		lim = m // a * a
		return lim // a - lim // b + lim // (a * b) - 1
	_, x, y = rec_gcd(a, b)
	y *= -1
	x1, y1 = x * k % b, y * k % a
	z1 = x1 * a
	if z1 == 0:
		z1 = a * b
	x2, y2 = x * -k % b, y * -k % a
	z2 = y2 * b
	if z2 == 0:
		z2 = a * b
	answer = 0
	answer += max((m - z1 + a * b) // (a * b), 0)
	answer += max((m - z2 + a * b) // (a * b), 0)
	return answer

t = int(input())
for _ in range(t):
	m, a, b, k = map(int, input().split())
	print(solve(m, a, b, k))
0