//i have this so far
public class Primes {
private boolean[] nums;
private int upperbound;
public Primes(int n) {
nums = new boolean[n + 1];
for (int i = 2; i <= n; i++)
nums[i] = true;
}
public static final int DEFAULT_UPPER_BOUND = 100 + 1;
public boolean isPrime(int x) {
if (nums[x] == true) {
return true;
} else {
return false;
}
}
public boolean isComposite(int x) {
if (nums[x] == true) {
return false;
} else {
return true;
}
}
public int getPrimesWithin(int min, int max) {
for (int n = min; n <= max; n++) {
if (nums[n] == true) {
return n;
}
}
return max;
}
public String toString() {
String a = "";
a += (nums) + " ";
return a;
}
public int getUpperBound() {
return nums.length;
}
public int nthPrime(int n) {
int count = 0;
int index = 2;
while (count < n) {
if (nums[index] = true) {
count++;
}
}
return index;
}
public void computePrimes(int x) {
for (int i = 2; i * i <= x; i++) {
if (nums[i]) {
for (int j = i; i * j <= x; j++) {
nums[i * j] = false;
}
}
}
}
void changeUpperBound(int x) {
upperbound = x;
}
}
//it needs to fit this
public class Prime {
public static void main(String[] args) {
Primes somePrimes = new Primes();
System.out.println("Default Prime object");
System.out.println(somePrimes);
System.out.println("Upper Bound: " + somePrimes.getUpperBound());
System.out.println("4th prime: " + somePrimes.nthPrime(4));
System.out.println("7 prime?: " + somePrimes.isPrime(7));
System.out.println("7 composite?: " + somePrimes.isComposite(7));
somePrimes.changeUpperBound(50);
System.out.println(somePrimes);
int[] primes = somePrimes.getPrimesWithin(40, 50);
System.out.print("Primes between 40 and 50: ");
for (int p : primes)
System.out.print(p + " ");
System.out.println();
System.out.println("*******************");
Primes myPrimes = new Primes(53);
System.out.println(myPrimes);
System.out.println("Upper Bound: " + myPrimes.getUpperBound());
System.out.println("10th prime: " + myPrimes.nthPrime(10));
System.out.println("15 prime?: " + myPrimes.isPrime(15));
System.out.println("15 composite?: " + myPrimes.isComposite(15));
myPrimes.changeUpperBound(200);
System.out.println(myPrimes);
int[] primes2 = myPrimes.getPrimesWithin(50, 97);
System.out.print("Primes between 50 and 97: ");
for (int p : primes2)
System.out.print(p + " ");
System.out.println();
}
}
// i am not sure how to make the primeswithin work and if you notice any other errors there are probably several
Primes课程规格:
实例栏位:
private boolean [] nums; //您可以选择其他逻辑名称
//是一个必要大小的变量,或者我们可以只使用.length?
类常量: public static final int DEFAULT_UPPER_BOUND =?; //选择一个值并默认使用 //构造函数如果上限(可以测试素数的最高数字)是10, //数组的大小是多少?
访问者: boolean isPrime(int x) boolean isComposite(int x) int nthPrime(int n)//示例:nthPrime(4)返回7,因为7是4 日 主要 int [] getPrimesWithin(int min,int max)//返回min和max之间的素数数组 String toString()//返回数据集中所有素数的String版本 getUpperBound()//返回可以为prime(最高索引)
测试的最高数字修饰符: private void computePrimes()//使用算法,仅由每个构造函数调用 void changeUpperBound(int x)//更改数组,使最高索引为x
构造: Primes(int upperBound) Primes()//使用DEFAULT_UPPER_BOUND常量
测试仪输出: 默认Prime对象 素数通过100:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 上限:100 第四素数:7 7素数?:是的 7复合?:假 素数通过50:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 40到50之间的总数:41 43 47
素数通过53:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 上界:53 第10次素数:29 15素数?:假 15复合?:是的 素数通过200:2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 50至97之间的比例:53 59 61 67 71 73 79 83 89 97
答案 0 :(得分:0)
如果你只想知道数字在哪里是素数,可以使用Miller Rabin测试算法,它速度很快,可用于非常大的整数。
答案 1 :(得分:0)
使用ArrayList<Integer>
代替int[]
作为primesWithin
的返回类型。在所需范围内迭代大数组,并为每个素数加上ArrayList
。
答案 2 :(得分:0)
我找到了解决方案:
public int[] getPrimesWithin(int min, int max)
{
int count = 0;
for (int i = min; i <= max; i++)
if(nums[i])
{
count++;
}
int[] temp = new int[count];
count = 0;
for (int i = min; i <= max; i++)
if(nums[i])
{
temp[count] = i;
count++;
}
return temp;
}