【问题标题】:Prime Number Calculations Help Java质数计算帮助 Java
【发布时间】:2014-07-29 10:25:46
【问题描述】:

我是新手,请原谅我缺乏组织。 好的,所以我做了一个数组,其中包含 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(数组中的第一个素数)仍可能显示为真。这就是为什么我需要能够用数组中的所有值来测试一个数字,以确保它不能被任何其他素数除(意味着它是素数)。

【问题讨论】:

标签: java arrays arraylist array-algorithms


【解决方案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 就足够了。

【讨论】:

    【解决方案2】:

    取一个布尔值并将其设置为 true。如果该数字可以除以 8 到 100 之间的任何素数而没有余数,则将其设置为 false。如果在测试每个数字后仍然正确,则将测试的数字添加到 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 的所有素数。例如埃拉托色尼筛。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2011-05-04
      相关资源
      最近更新 更多