티스토리 뷰

문제

 

11815번: 짝수? 홀수?

B를 A로 나누었을 때 나머지가 0 이라면 A는 B의 약수라고 할 수 있다. (A > 0, B > 0) 예를 들면 15 의 약수는 1, 3, 5, 15 이다. 주어진 수가 가지는 약수 개수가 홀수인지 짝수인지 판별해보자.

www.acmicpc.net

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
분류: 수학, 정수론

글에서 수정이 필요한 부분이나 설명이 부족한 부분이 있다면 댓글로 남겨주세요!
최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Total
Today
Yesterday
글 보관함