티스토리 뷰
문제
B를 A로 나누었을 때 나머지가 0 이라면 A는 B의 약수라고 할 수 있다. (A > 0, B > 0) 예를 들면 15 의 약수는 1, 3, 5, 15 이다.
주어진 수가 가지는 약수 개수가 홀수인지 짝수인지 판별해보자.
입력
첫 번째 줄에는 전체 테스트 개수 (N) 가 주어진다. (1 ≤ N ≤ 100)
두 번째 줄에는 약수 개수를 판별할 수 (X) 가 주어진다 (1 ≤ X ≤ 1018).
출력
주어진 수의 약수 개수가 홀수이면 1, 짝수이면 0 을 출력하시오.
문제 이해하기
약수의 개수가 홀수인 경우는 제곱수인 경우입니다. 따라서 X가 제곱수인 경우 1을, 아닌 경우 0을 출력하면 됩니다. 저는 Go의 내장 패키지인 math/big을 사용하여 풀어보았습니다.
코드
package main
import (
"bufio"
"fmt"
"math/big"
"os"
"strconv"
)
var (
scanner = bufio.NewScanner(os.Stdin)
writer = bufio.NewWriter(os.Stdout)
N int
)
func main() {
defer writer.Flush()
scanner.Split(bufio.ScanWords)
Setup()
Solve()
}
func Setup() {
N = scanInt()
}
func Solve() {
for i := 0; i < N; i++ {
s := scanString()
x, _ := big.NewInt(0).SetString(s, 10)
sqrtX := big.NewInt(0).Sqrt(x)
if sqrtX.Mul(sqrtX, sqrtX).Cmp(x) == 0 {
fmt.Fprintf(writer, "%d ", 1)
} else {
fmt.Fprintf(writer, "%d ", 0)
}
}
fmt.Fprintln(writer)
}
func scanString() string {
scanner.Scan()
return scanner.Text()
}
func mustParseInt(s string) int {
n, _ := strconv.Atoi(s)
return n
}
func scanInt() int {
return mustParseInt(scanString())
}
시간: 4 ms
메모리: 900 KB
분류: 수학, 정수론
글에서 수정이 필요한 부분이나 설명이 부족한 부분이 있다면 댓글로 남겨주세요!
'Go > 문제 풀이' 카테고리의 다른 글
[백준 / Go] 24040번: 예쁜 케이크 (1) | 2023.10.29 |
---|---|
[백준 / Go] 21920번: 서로소 평균 (0) | 2023.10.20 |
[백준 / Go] 9417번: 최대 GCD (1) | 2023.10.14 |
[백준 / Go] 4134번: 다음 소수 (0) | 2023.10.13 |
[백준 / Go] 14490번: 백대열 (0) | 2023.10.12 |