結果
| 問題 | No.316 もっと刺激的なFizzBuzzをください |
| コンテスト | |
| ユーザー |
tsuchinaga
|
| 提出日時 | 2019-04-11 18:03:28 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 1,000 ms |
| コード長 | 877 bytes |
| コンパイル時間 | 9,657 ms |
| コンパイル使用メモリ | 235,500 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-07-19 04:06:08 |
| 合計ジャッジ時間 | 10,636 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 33 |
ソースコード
package main
import "fmt"
func main() {
var n, a, b, c int
_, _ = fmt.Scan(&n, &a, &b, &c)
// n倍の関係なら小さい方で十分なので、大きい方には消えていただく
if c%a == 0 || c%b == 0 {
c = 0
}
if b%a == 0 {
b = 0
}
// 登場回数をカウント
ans := 0
ans += n / a
if b > 0 {
ans += n / b
}
if c > 0 {
ans += n / c
}
// 各組合せでの重複数を減らす
if b > 0 {
// aとb
ans -= n / ((a * b) / euclid316(a, b))
}
if c > 0 {
// aとc
ans -= n / ((a * c) / euclid316(a, c))
}
if b > 0 && c > 0 {
// bとc
ans -= n / ((b * c) / euclid316(b, c))
// 減らしすぎたのを増やす
uab := (a * b) / euclid316(a, b)
ans += n / ((uab * c) / euclid316(uab, c))
}
fmt.Println(ans)
}
// 最大公約数
func euclid316(a, b int) int {
if a%b == 0 {
return b
}
return euclid316(b, a%b)
}
tsuchinaga