結果
問題 | No.3030 ミラー・ラビン素数判定法のテスト |
ユーザー | fmhr |
提出日時 | 2017-11-10 15:02:21 |
言語 | Go (1.22.1) |
結果 |
AC
|
実行時間 | 626 ms / 9,973 ms |
コード長 | 4,259 bytes |
コンパイル時間 | 12,014 ms |
コンパイル使用メモリ | 229,596 KB |
実行使用メモリ | 6,528 KB |
最終ジャッジ日時 | 2024-11-16 23:05:47 |
合計ジャッジ時間 | 14,569 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 1 ms
5,248 KB |
testcase_01 | AC | 1 ms
5,248 KB |
testcase_02 | AC | 0 ms
5,248 KB |
testcase_03 | AC | 3 ms
5,248 KB |
testcase_04 | AC | 338 ms
6,528 KB |
testcase_05 | AC | 377 ms
6,528 KB |
testcase_06 | AC | 211 ms
6,528 KB |
testcase_07 | AC | 218 ms
6,528 KB |
testcase_08 | AC | 217 ms
6,528 KB |
testcase_09 | AC | 626 ms
6,528 KB |
ソースコード
package main import ( "bufio" "fmt" "log" "math/big" "os" "strconv" ) // const abcd = "abcdefghijklmnopqrstuvwxyz" // const ABCD = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" // var dy = [...]int{1, 1, 0, -1, -1, -1, 0, 1} // var dx = [...]int{0, 1, 1, 1, 0, -1, -1, -1} // var dx = [...]int{0, 1, 0, -1} // var dy = [...]int{1, 0, -1, 0} var inf int = 1e13 var mod = 1000000007 // --------------------------------------------------------- func main() { log.SetFlags(log.Lshortfile) next := newScanner() N := next.Int() x := next.Ints(N) a := new(big.Int) for i := 0; i < N; i++ { a.SetInt64(int64(x[i])) fmt.Println(x[i], btoi(a.ProbablyPrime(5))) } } // func millerRabin(n uint64) bool { // if n == 2 { // return true // } else if n == 1 || n%2 == 0 { // return false // } // d := n - 1 // s := 0 // for d%2 == 0 { // d /= 2 // s++ // } // for k := 0; k < 10; k++ { // a := rand.Uint64()%(n-2) + 2 // t := d // y := powMod(a, t, n) // for t != n-1 && y != 1 && y != n-1 { // y = mulMod(y, y, n) // t <<= 1 // } // if y != n-1 && t&1 == 0 { // return false // } // } // return true // } // --------------------------------------------------------- // Pair is liked C++ pair type Pair struct { a, b int } // Pairs is sorted by []Pair struct type Pairs []Pair func (p Pairs) Len() int { return len(p) } func (p Pairs) Swap(i, j int) { p[i], p[j] = p[j], p[i] } func (p Pairs) Less(i, j int) bool { if p[i].a < p[j].a { return true } else if p[i].a == p[j].a { return p[i].b < p[j].b } return false } // ------------------------------- func in(c, a, z int) bool { return c >= a && c < z } func btoi(b bool) int { if b { return 1 } return 0 } func itob(a int) bool { if a == 0 { return false } return true } func max(a ...int) int { r := a[0] for i := 0; i < len(a); i++ { if r < a[i] { r = a[i] } } return r } func min(a ...int) int { r := a[0] for i := 0; i < len(a); i++ { if r > a[i] { r = a[i] } } return r } func sum(a []int) int { r := 0 for i := 0; i < len(a); i++ { r += a[i] } return r } func pro(a []int) int { r := 1 for i := 0; i < len(a); i++ { r *= a[i] } return r } func fill(a []int, n int) []int { for i := 0; i < len(a); i++ { a[i] = n } return a } func minmax(a, b int) (int, int) { if a > b { return b, a } return a, b } func abs(a int) int { if a < 0 { return -a } return a } // // // func powMod(a, b, m uint64) uint64 { // a = a % m // p := 1 % m // for b > 0 { // if b&1 != 0 { // p = mulMod(p, a, m) // } // b >>= 1 // a = mulMod(a, a, m) // } // return p // } // // func mulMod(a, b, m uint64) uint64 { // a = a % m // p := 0 % m // for b > 0 { // if b&1 != 0 { // p = (p + a) // if p >= m { // p = p - m // } // } // b >>= 1 // a <<= 1 // if a >= m { // a = a - m // } // } // return p // } // ---------- buffered scanner ----------------------------------------- type scanner struct { r *bufio.Reader buf []byte p int } func newScanner() *scanner { rdr := bufio.NewReaderSize(os.Stdin, 10000) return &scanner{r: rdr} } func (s *scanner) next() string { s.pre() start := s.p for ; s.p < len(s.buf); s.p++ { if s.buf[s.p] == ' ' { break } } result := string(s.buf[start:s.p]) s.p++ return result } func (s *scanner) Line() string { s.pre() start := s.p s.p = len(s.buf) return string(s.buf[start:]) } func (s *scanner) String() string { return s.next() } func (s *scanner) Int() int { v, _ := strconv.Atoi(s.next()) return v } func (s *scanner) Ints(n int) []int { r := make([]int, n) for i := 0; i < n; i++ { r[i] = s.Int() } return r } func (s *scanner) Int64() int64 { v, _ := strconv.ParseInt(s.next(), 10, 64) return v } func (s *scanner) Uint64() uint64 { v, _ := strconv.ParseUint(s.next(), 10, 64) return v } func (s *scanner) Uint64s(n int) []uint64 { r := make([]uint64, n) for i := 0; i < n; i++ { r[i] = s.Uint64() } return r } func (s *scanner) pre() { if s.p >= len(s.buf) { s.readLine() s.p = 0 } } func (s *scanner) readLine() { s.buf = make([]byte, 0) for { l, p, e := s.r.ReadLine() if e != nil { panic(e) } s.buf = append(s.buf, l...) if !p { break } } }