๐Ÿ“ Coding Test Study/Algorithm Problem

[C++][Baekjoon][Math] 1978๋ฒˆ ์†Œ์ˆ˜์ฐพ๊ธฐ

ibelieveinme 2022. 4. 3. 00:03
728x90

[๋ฌธ์ œ]

 

1978๋ฒˆ: ์†Œ์ˆ˜ ์ฐพ๊ธฐ

์ฒซ ์ค„์— ์ˆ˜์˜ ๊ฐœ์ˆ˜ N์ด ์ฃผ์–ด์ง„๋‹ค. N์€ 100์ดํ•˜์ด๋‹ค. ๋‹ค์Œ์œผ๋กœ N๊ฐœ์˜ ์ˆ˜๊ฐ€ ์ฃผ์–ด์ง€๋Š”๋ฐ ์ˆ˜๋Š” 1,000 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค.

www.acmicpc.net

์ฃผ์–ด์ง„ ์ˆ˜ N๊ฐœ ์ค‘์—์„œ ์†Œ์ˆ˜๊ฐ€ ๋ช‡ ๊ฐœ์ธ์ง€ ์ฐพ๋Š” ๋ฌธ์ œ.

 

[ํ’€์ด]

์šฐ์„  ์†Œ์ˆ˜๋ž€, 1๋ณด๋‹ค ํฌ๋ฉฐ 1๊ณผ ์ž๊ธฐ ์ž์‹  ์ด์™ธ์—” ๋‚˜๋ˆ„์–ด์ง€์ง€ ์•Š๋Š” ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์†Œ์ˆ˜ ์ฐพ๋Š” ๋ฒ•์€ ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

1. 2๋ถ€ํ„ฐ ๋ฃจํŠธN๊นŒ์ง€ ์†Œ์ˆ˜์ธ์ง€ ์•„๋‹Œ์ง€๋ฅผ ํŒ๋ณ„ํ•˜๋Š” ๋ฒ•. ์‹œ๊ฐ„๋ณต์žก๋„ O(๋ฃจํŠธN).

2. ์—๋ผํ† ์Šคํ…Œ๋„ค์Šค์˜ ์ฒด ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•˜์—ฌ 2๋ถ€ํ„ฐ ์ž์‹ ์˜ ๋ฐฐ์ˆ˜๋ฅผ ๋‹ค ์ง€์šฐ๋Š” ๋ฐฉ๋ฒ•. ์‹œ๊ฐ„ ๋ณต์žก๋„ O(N(log(logN))).

 

1๋ฒˆ ๋ฐฉ๋ฒ•์—์„œ ๋ฃจํŠธN๊นŒ์ง€๋งŒ ํ™•์ธํ•˜๋Š” ์ด์œ ๋Š” ๊ทธ ์ด์ƒ์€ ๋ฃจํŠธN ์ดํ•˜์˜ ๋ฐฐ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด N์œผ๋กœ 24๊ฐ€ ์ฃผ์–ด์ง€๊ณ  24์˜ ์•ฝ์ˆ˜๋Š” 1, 2, 3, 4, 6, 7, 12, 24๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  24๋Š” 1*24, 2*12, 3*6, 4*6์œผ๋กœ ์•ฝ์ˆ˜์˜ ๊ณฑ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ, ๋ฃจํŠธ24 = 4.xx ์ด๋‹ค. ์ฆ‰, 4๊นŒ์ง€๋งŒ ๋ณด๋ฉด ๊ทธ ์ดํ›„๋Š” 4์ดํ•˜ ์ˆ˜์˜ ๋ฐฐ์ˆ˜์ด๋ฏ€๋กœ ํ™•์ธํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค. ์ด ๋•Œ, i <= ๋ฃจํŠธN ์„ i^2 <= N ๊ณผ ๊ฐ™์Œ์„ ์•Œ์•„๋‘์ž.

 

๋‚˜๋Š” 1๋ฒˆ ๋ฐฉ๋ฒ•์œผ๋กœ 2๋ถ€ํ„ฐ ๋ฃจํŠธN๊นŒ์ง€ ์†Œ์ˆ˜์ธ์ง€๋ฅผ ํŒ๋ณ„ํ–ˆ๋‹ค. ์ด๋•Œ ๋ฃจํŠธ๋Š” cmath ์˜ sqrt ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ pow(์ œ๊ณฑ๊ทผ), sqrt(๋ฃจํŠธ) ์ž„์„ ์•Œ์•„๋‘์ž.

 

[์ฝ”๋“œ]

#include <iostream>
#include <cmath>
using namespace std;

bool isDecimal(int num);

int main() {
	int num_count, num, sum = 0;

	cin >> num_count;
	for (int i = 0; i < num_count; i++) {
		cin >> num;
		if (isDecimal(num)) sum++;
	}
	cout << sum << "\n";
	
	return 0;
}

//์†Œ์ˆ˜: 1๊ณผ ์ž๊ธฐ์ž์‹  ์™ธ์—๋Š” ๋‚˜๋ˆ„์–ด์ง€์ง€ ์•Š๋Š” ์ˆ˜
//pow(์ œ๊ณฑ๊ทผ), sqrt(๋ฃจํŠธ)
bool isDecimal(int num) {
	for (int i = 2; i <= sqrt(num); i++) {
		if(num%i == 0) return false;
	}
	return (num != 1) ? true : false;
}

 

728x90