結果
| 問題 | 
                            No.106 素数が嫌い!2
                             | 
                    
| コンテスト | |
| ユーザー | 
                             fmhr
                         | 
                    
| 提出日時 | 2015-05-31 02:47:19 | 
| 言語 | Go  (1.23.4)  | 
                    
| 結果 | 
                             
                                AC
                                 
                             
                            
                         | 
                    
| 実行時間 | 333 ms / 5,000 ms | 
| コード長 | 738 bytes | 
| コンパイル時間 | 10,595 ms | 
| コンパイル使用メモリ | 225,172 KB | 
| 実行使用メモリ | 28,276 KB | 
| 最終ジャッジ日時 | 2024-10-10 18:54:33 | 
| 合計ジャッジ時間 | 13,567 ms | 
| 
                            ジャッジサーバーID (参考情報)  | 
                        judge4 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 13 | 
ソースコード
package main
import (
	"fmt"
	"math"
)
func isPrime(n int, r []int) bool {
	x := int(math.Sqrt(float64(n)) + 1)
	for _, i := range r {
		if i > x {
			break
		}
		if n%i == 0 {
			return false
		}
	}
	return true
}
func getPrime(n int) ([]int, []int) {
	p := make([]bool, n+1) // false: 素数の可能性有 true: notPrime
	r := make([]int, 0)
	m := make([]int, n+1)
	for i := 2; i <= n; i++ {
		if p[i] {
			continue
		}
		if !isPrime(i, r) {
			continue
		}
		r = append(r, i)
		for j := i; j <= n; j += i {
			p[j] = true
			m[j]++
		}
	}
	return r, m
}
func main() {
	var N, K int
	fmt.Scan(&N, &K)
	_, m := getPrime(N)
	ans := 0
	//fmt.Println(m)
	for i := 2; i < N+1; i++ {
		if m[i] >= K {
			ans++
		}
	}
	fmt.Println(ans)
}
            
            
            
        
            
fmhr