에라토스테네스의 체 구현 함수 eratosthenes()

Jmnote (토론 | 기여)님의 2018년 12월 19일 (수) 00:46 판 (→‎PHP)

1 개요

에라토스테네스의 체 구현
함수 eratosthenes()
함수 primes_sieve()

2 Java

import java.util.*;
public class MyClass {
	static boolean[] primes_sieve(int max) {
		boolean[] a = new boolean[max+1];
		Arrays.fill(a, Boolean.TRUE);
		a[0] = a[1] = false;
		int i, j;
		for(i=2; i<=Math.sqrt(max); i++) {
			for(j=i*2; j<=max; j+=i) a[j] = false;
		}
		return a;
	}
	public static void main(String[] args) {
		System.out.println( Arrays.toString(primes_sieve(10)) );
		// [false, false, true, true, false, true, false, true, false, false, false]
		System.out.println( Arrays.toString(primes_sieve(11)) );
		// [false, false, true, true, false, true, false, true, false, false, false, true]
	}
}

3 PHP

<?php
function primes_sieve($size) {
    $a = array_fill(0,$size+1,true);
    $a[0] = $a[1] = false;
    for($i=2; $i<=sqrt($size); $i++) {
        for($j=$i*2; $j<=$size; $j+=$i) $a[$j] = false;
    }
    return $a;
}
$sieve = primes_sieve(10);
echo json_encode( $sieve ) . "\n";
# [false,false,true,true,false,true,false,true,false,false,false]
$sieve = primes_sieve(11);
echo json_encode( $sieve ) . "\n";
# [false,false,true,true,false,true,false,true,false,false,false,true]

4 Python

def primes_sieve(size):
    a = [False]*2 + [True]*(size-1)
    for i in range(2,int(size**.5)+1):
        a[i*2::i]=[False]*((size-i)//i)
    return a
sieve = primes_sieve(10)
print( sieve )
# [False, False, True, True, False, True, False, True, False, False, False]
for i in range(1,11):
    print( i, sieve[i] )
# 1 False
# 2 True
# 3 True
# 4 False
# 5 True
# 6 False
# 7 True
# 8 False
# 9 False
# 10 False

5 같이 보기

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}