2013-03-26 1 views
3

Кто-нибудь знает о Java-библиотеке, которая может использоваться для предоставления всех простых чисел определенной длины (k). Например, если k = 2, библиотека предоставит: 11, 13, 17 .. 87.Java-библиотека для предоставления простых чисел определенной длины

+0

занимает более 2 бита, чтобы указать все номера, которые вы перечислили. –

+0

@ Хантер, не уверен, что вы имеете в виду. Вы можете уточнить? –

+1

База 10 номер 11 является '1011' в двоичном формате. Для отображения его двоичного представления требуется бит «4» –

ответ

2

Я не знаю ни одной библиотеки, но here - это метод поиска простых чисел, рекомендованных в this Ответ.

+0

Спасибо eliot, а не «идеальное» решение, но при необходимости я могу изменить его. Я оставлю этот вопрос открытым немного дольше, чтобы другие могли предложить ответ, если он есть. –

1

Я также не знаю об библиотеке. Но вот какой-то код, который я написал, который может это сделать. Я думаю, что это довольно многоразовый для других нужд тоже:

package com.sandbox; 

import org.junit.Test; 

import static junit.framework.Assert.assertEquals; 
import static junit.framework.Assert.assertTrue; 

public class SandboxTest { 


    @Test 
    public void whenGettingNextThenItIsNextPrime() { 
     Primes primes = new Primes(); 
     assertEquals((Long) 2L, primes.next()); 
     assertEquals((Long) 3L, primes.next()); 
     assertEquals((Long) 5L, primes.next()); 
     assertEquals((Long) 7L, primes.next()); 
     assertEquals((Long) 11L, primes.next()); 
    } 

    @Test 
    public void whenPassingIn2ThenIsPrime() { 
     assertTrue(new Primes().isPrime(2)); 
    } 


    @Test 
    public void getAllPrimesOfLength2() { //this does what your question asks 
     Primes primes = new Primes(); 
     while (true) { 
      Long prime = primes.next(); 
      int length = String.valueOf(prime).length(); 
      if (length > 2) { 
       return; //we found them all 
      } else if (length == 2) { 
       System.out.println(prime); 
      } 
     } 
    } 
} 

А вот реализация:

package com.sandbox; 

import java.util.Iterator; 

public class Primes implements Iterator<Long>{ 
    private long currentPrime = 1; 

    public boolean hasNext() { 
     return true; 
    } 

    public Long next() { 
     currentPrime++; 
     while (!isPrime(currentPrime)) { 
      currentPrime++; 
     } 
     return currentPrime; 
    } 

    /** 
    * Optimize this on your own 
    */ 
    public boolean isPrime(long numberInQuestion) { 
     for (int i = 2; i < numberInQuestion - 1; i++) { 
      if (numberInQuestion % i == 0) { 
       return false; 
      } 
     } 
     return true; 
    } 

    public void remove() { 
     throw new UnsupportedOperationException(); 
    } 
} 
Смежные вопросы