我是一名java学生,我刚开始使用项目euler让我练习代码编写,只需输入一般。我目前停留在第7个问题上,无法找到我的代码有什么问题。
public static void main(String[] args)
{
int num, remainder, divisor;
boolean working = true;
num = 2;
for(int count = 0; count <= 10001; count++)
{
divisor = num - 1;
remainder = 1;
working = true;
while(working != true)
{
remainder = 1;
divisor = num - 1;
while(remainder!=0)
{
remainder = num%divisor;
if(divisor==1);
{working = false;}
divisor--;
}
num = num++;
}
}
//System.out.println(num -1);
}
我得到的输出是1,我无法弄清楚原因。我是一个非常新的编码所以如果它是糟糕和低效的LOL,请不要惹恼我的代码。
答案 0 :(得分:1)
以下内容会导致您的代码出现意外结果。
if(divisor==1);
{working = false;} // Note: {...} is a statement block and statement
// blocks do not need a terminating semicolon, this
// can be problematic because no syntax errors will
// occur
更改为:
if(divisor==1) {
working = false;
}
if语句末尾的分号导致条件为空语句。
空声明
空语句什么都不做。
EmptyStatement: ;
执行空语句总是正常完成
可在此处找到更多信息:Semicolon at end of if statement.
答案 1 :(得分:0)
Euler的目的是编写尽可能快的代码。如果我没记错的话,你的代码应该花费不到一分钟才能找到答案。
话虽如此,应该知道偶数(2除外)不是素数。因此,您已经可以获得从1开始的素数的运行计数,并在每次确定素数时递增。然后你有另一个从3开始的计数数字,这个计数数字你必须检查它是否为素数并且如果为真则增加你的素数。无论如何,如果数字是素数,你是否想要将这个数字增加2。
你应该有控制循环,直到你的素数达到10001
在没有直接回答代码的情况下,这里有一些伪代码可以帮助您:
int primeCounter = 1;
int number = 3;
while (primeCounter < 10001)
{
if (number is prime)
{
primeCounter++;
}
// Increment by 2, because we're only going to check odd numbers for prime
number += 2;
}
// This will be your 10001st prime number
output number
答案 2 :(得分:0)
您可以使用以下事实:
- 1不是素数。
- 除2之外的所有素数都是奇数。
- 所有大于3的素数都可以用6k +/- 1的形式书写。
- 任何数字n只能有一个大于n的素数因子。 http://www.millersville.edu/~bikenaga/number-theory/primes/primes.html
醇>