我是新手,请原谅我缺乏组织。 好吧,所以我做了一个数组,里面填充了8到100之间的所有素数。我现在要做的是制作另一个数组,找到101-200之间的所有素数。所以请允许我解释我是如何完成第一部分的:
// Prime1是一个动态整数数组,存储8到100之间的所有素数
int arrayCounter = 0;
for(int primeTest = 8; primeTest<=100; primeTest++)
{
if(primeTest%2!=0 && primeTest%3!=0 && primeTest%5!=0 && primeTest%7!=0)
{
Prime1.add(primeTest); //adds the prime numbers to array
arrayCounter = arrayCounter +1;
}
else
{
arrayCounter = arrayCounter + 1;
}
}
现在回到主要问题,而不是写“if(primeTest%”prime#“!= 0)”我希望能够在整个Prime1数组中使用模数并查看是否所有值都不相等零...让我详细说明。
for(int primeTest2 = 101; primeTest2 <= 200; primeTest2++)
{
for(int arrayCounter2 = 0; arrayCounter2 < Prime1.size(); arrayCounter2++)
{
if(primeTest2 % Prime1.get(arrayCounter2) != 0 )
{
Prime2.add(primeTest2);
}
}
}
//请原谅任何缺失的大括号
^^所以这里发生的是我从101开始取值并用Prime1数组的第一个值模拟它。如你所知,这可能会给我一个误报,因为即使数字不是素数,11(数组中的第一个素数)仍然可能显示为真。这就是为什么我需要能够使用数组中的所有值来测试数字,以确保它不能被任何其他素数除(意味着它是素数)。
答案 0 :(得分:1)
您的方法效率极低,但是,您可以通过以下方式解决问题:
for (int primeTest2 = 101; primeTest2 <= 200; primeTest2++)
{
boolean prime = true;
for (int arrayCounter2 = 0; arrayCounter2 < Prime1.size(); arrayCounter2++)
{
if (primeTest2 % Prime1.get(arrayCounter2) == 0)
{
prime = false;
break;
}
}
if (prime)
Prime2.add(primeTest2);
}
顺便说一句,对于第一组素数,使用2,3,5,7,11,13就足够了。
答案 1 :(得分:1)
取一个布尔值并将其设置为true。如果数字可以除以任何素数,从8到100而没有余数,则将其设置为假。如果在测试每个数字后仍然如此,请将测试的数字添加到Prime2阵列,否则继续下一个数字。例如:
for(int n = 101; n <= 200; n++)
{
boolean isPrime = true;
for(Integer p : Prime1)
if(n % p == 0 )
{
isPrime = false;
break;
}
if(isPrime)
Prime2.add(n);
}
但是有更好的算法可以检查数字是否为素数或计算n以下的质子数。例如,Eratosthenes的Sieve。