์์ฆ ์ดํํฐ๋ธ ์๋ฐ Third ์๋์ ์ฑ ์ ๋๋ค ๋์๊ด์์ ๋์ฌํด์ ์ฝ๊ณ ์์ต๋๋ค.
์คํธ๋ฆผ ๋ณ๋ ฌํ์ ๋ํ ๊ธ์ ์ฝ๋ค๊ฐ ์์๊ตฌํ๋ ๋ก์ง์ ์คํธ๋ฆผ์ผ๋ก ์์ฑํ ๋ถ๋ถ์ ๋ณด๊ฒ๋์์ต๋๋ค.
์์๊ตฌํ๊ธฐ ๋ก์ง์ ์ด์ง์ค๋น ํ ๋๋ ๋ค์ ๋ค์ฌ๋ค๋ณผ๋งํ๊ฑฐ๋ผ ์ค๋์ ์ for-loop ๋ก ๊ตฌํํด๋ณธ ๊ธฐ์ต๋ง ์๋ค๋ณด๋ ์ ์ ํ๊ฒ ๋๊ปด์ก๋ค์.
์์ง๋ ๋ง์ ๋ธ๋ก๊ทธ๋ค์์ for-loop๋ฅผ ์ด์ฉํ ๋ฐฉ๋ฒ๋ค๋ง ๋ง์ด ์๊ฐํ๊ณ ์๊ธฐ๋ ํ๊ณ ํด์ ํฌ์คํ ์ฃผ์ ๋ก ์ผ์๋ดค์ต๋๋ค.
๊ฐ์ธ์ ์ธ ๊ธฐ๋ก๋ ํ ๊ฒธ...
์ฑ ์ ์ฝ๊ณ ์๋ก ์๊ฒ๋ ๋ถ๋ถ์ ์คํธ๋ฆผ์ ๋ํ ๋ถ๋ถ๋ ์์ง๋ง ์ด๋ฏธ BigInteger ํด๋์ค์ isProbablePrime ์ด๋ ๋ฉ์๋๊ฐ ์์๋ค๋ ๊ฒ๋๋ค..
์๋๋ ํน์ ์ซ์ n ๊น์ง ์์๊ฐ ๋ช ๊ฐ์ธ์ง๋ฅผ ์ถ๋ ฅํ๊ณ , ๊ทธ ๋ชฉ๋ก๋ ์ถ๋ ฅํ๋ ๊ฒ์ ํ ์คํธํ ์ฝ๋์ ๋๋ค.
public static void main(String[] args) {
int n = (int) Math.pow(10, 8);
// n ๊น์ง์ ์ ์ค์ ์์์ ๊ฐ์ ์ถ๋ ฅํ๊ธฐ
long cnt = LongStream.rangeClosed(2, n)
.parallel()
.mapToObj(BigInteger::valueOf)
.filter(i -> i.isProbablePrime(50))
.count();
System.out.println(cnt);
// n ๊น์ง์ ์ ์ค์ ์์ ๋ชฉ๋ก ์ถ๋ ฅํ๊ธฐ
System.out.println(LongStream.rangeClosed(2, n)
.mapToObj(BigInteger::valueOf)
.filter(i -> i.isProbablePrime(50))
.collect(Collectors.toList()));
}
LongStream์ ์ด์ฉํ์ฌ ์ซ์์ ๋ฒ์๋ฅผ ์ ํ๊ณ mapToObj ๋ฅผ ์ด์ฉํ์ฌ BigInteger๋ก ๋ณํํ๋ค BigInteger.isProbablePrime(int certainty) ๋ฉ์๋๋ฅผ ํํฐ๋ก ์ ๋ฌํ์ฌ ์์๋ฅผ ๊ตฌํ๊ณ ์์ต๋๋ค.
BigInteger.isProbablePrime(int certainty) ๋ฉ์๋๋ ์์๋ฅผ ๊ตฌํ๊ธฐ์ํด ๋ด๋ถ์ ์ผ๋ก ๋ฐ๋ฌ-๋ผ๋น(Miller-Rabin) ํ ์คํธ์ ๋ฃจ์นด์ค-๋ ๋จธ(Lucas-Lehmer) ํ ์คํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ ์. ์ฌ๊ธฐ์ ์ฌ์ฉ๋ ๋ฐ๋ฌ๋ผ๋น ํ ์คํธ๋ DSA(Digital Signiture Algorithm) ์คํ (NIST FIPS 186-2)์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค๊ณ ํฉ๋๋ค. ์ด ์คํ์ ํ์ผ๋ก ์ฒจ๋ถํ๋ ๊ด์ฌ์์ผ์ ๋ถ๋ค์ ๋ค์ด๋ฐ์ ๋ณด์ ๋ ๋ ๊ฒ ๊ฐ๋ค์.
์ฐธ๊ณ ๋ก .parallel() ์ ์คํธ๋ฆผ์์ ์ฌ์ฉํ ๋ ๋งค์ฐ ์ฃผ์๋ฅผ ์ํ๋ ๊ธฐ๋ฅ์ ๋๋ค. ์ฑ ์์๋ ์ด๋ ๊ฒ ์๊ธฐํฉ๋๋ค. Stream.iterate ๋ฅผ ๋ฐ์ดํฐ ์์ค๋ก ์ด์ฉํ๊ฑฐ๋ ์ค๊ฐ ์ฐ์ฐ์ผ๋ก limit ์ ์ฌ์ฉํ๋ ์คํธ๋ฆผ ํ์ดํ๋ผ์ธ์์๋ parallel์ ์ด์ฉํ ์ฑ๋ฅ๊ฐ์ ์ ๊ธฐ๋ํ ์ ์์ผ๋ฉฐ ์คํ๋ ค ์์ข์์ง ์๋ ์๋ค๊ณ ๋ง์ด์ฃ . ์ค์ ๋ก ์ด์ํ๊ฒฝ์์ ์ ๊ฒ ๋๋ฌธ์ ์ด์๊ฐ ๋ฐ์ํ ์ ๋ ์์์ต๋๋ค. ๊ทธ๋ฅ ๋ฌดํ๋ฃจํ์ ๋น ์ง๊ฒ์ฒ๋ผ ์ฐ๋ ๋ ํ๋๊ฐ ๋จนํต์ด ๋์ด๋ฒ๋ฆฌ๋๊ตฐ์. ์คํธ๋ฆผ์์ ๋ณ๋ ฌ์ฐ์ฐ์ ์ ํฉํ ์ ์ reduce, min, max, count, sum ๋ฑ์ ์ฐ์ฐ์ด๋ฉฐ, collect์ฒ๋ผ ๊ฐ๋ณ์ถ์๋ฅผ ์ํํ๋ ๋ฉ์๋๋ ๋ณ๋ ฌ์ฐ์ฐ์ ์ ํฉํ์ง ์๋ค๊ณ ํฉ๋๋ค. ์ฐธ๊ณ ํ์๊ธฐ ๋ฐ๋๋๋ค.