在我当前的项目Euler问题5中,我有一个“有效”的解决方案。它适用于较小的数字(问题中的示例一),但不适用于实际问题,因为我在强行执行它,并且程序没有完成。
以下是问题的解释:
2520是可以被1到10中的每一个数字除以而没有任何余数的最小数字。
可以被1到20的所有数字整除的最小正数是多少?
1:可分无余数
这是我当前的代码:
package Euler;
public class Euler5 {
public static void main(String[] args) {
int desiredNumber = 20;
boolean exitLoop = false;
long counter = 1;
while(exitLoop == false) {
long loopCounter = 0;
for(int i=1; i<=desiredNumber; i++) {
if(counter % i == 0) {
loopCounter++;
}
}
if(loopCounter == desiredNumber) {
exitLoop = true;
System.out.println(counter);
}
counter++;
}
}
}
您正在寻找的数字是1,2,3,...,20数字的最小公倍数(LCM)。
通过将每个数字拆分为其素因子的乘积(对于小数字来说很容易),找到LCM相当容易。
你没有电脑来回答这个问题。看:如果一个数字可以被1到20中的每个数字除以,这意味着它应该是相应幂的素数的乘法:
2**4 (from 16)
3**2 (from 9)
5
7
11
13
17
19
所以解决方案是
16 * 9 * 5 * 7 * 11 * 13 * 17 * 19 == 232792560
由于答案相当大,我怀疑蛮力在这里是否是一种合理的方法。
在一般情况下(对于某些<代码>n
2, 3, ..., m (m <= n)
然后,对于每个素数a,求出幂pa,使得
<代码>a**pa
但是
<代码>a**(pa 1)
答案将会是
2**p2*3**p3*...*m**pm
可能的Java实施:
public static BigInteger evenlyDivisible(int n) {
if (n <= 0)
throw new IllegalArgumentException("n must be positive");
else if (n <= 2)
return BigInteger.valueOf(n);
ArrayList<Integer> primes = new ArrayList<Integer>();
primes.add(2);
for (int i = 3; i <= n; i += 2) {
boolean isPrime = true;
for (int p : primes) {
if (i % p == 0) {
isPrime = false;
break;
}
else if (p * p > i)
break;
}
if (isPrime)
primes.add(i);
}
BigInteger result = BigInteger.ONE;
for(int p : primes) {
// Simplest implemenation, check for round up errors however
int power = (int)(Math.log(n) / Math.log(p));
result = result.multiply(BigInteger.valueOf(p).pow(power));
}
return result;
}
...
System.out.println(evenlyDivisible(20)); // 232792560
我想为OpenComputers(minecraft mod)编写一个曼卡拉游戏,它使用Lua。然而,曼卡拉要求必须进入它中间的主循环(六个可供选择的壶),退出中间的循环(把你的最后一个石头放入空壶),从循环内部进入循环(把最后一个石头放入壶中,必须从那个壶中捡起所有的石头)。 我可以很容易地在两边做曼卡拉,用一个boolean值和一个if语句。 对于不熟悉曼卡拉的人,我有一个快速的流程图来解释我
问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1
问题内容: 我正在学习使用Selenium(v2.20)来领先一些 即将使用它创建浏览器测试的程序员。我想在 陷阱到达之前发现它们,而我却跌入了一个陷阱。 当我创建ChromeDriver时,它始终会弹出“ Google Chrome EULA”并 显示两个按钮:“接受并运行”和“取消”。因为我希望这是一个 自动化测试,所以让用户单击按钮是不可能的。 我查看了Chromium CommandSwi
问题内容: 该代码选择同一文件夹中的所有xml文件,作为被调用的可执行文件,并以异步方式将处理应用于回调方法中的每个结果(在下面的示例中,仅打印文件名)。 如何避免使用sleep方法阻止main方法退出?我在解决问题时遇到了麻烦(我想这就是同步结果所必需的),因此,我们将不胜感激! 问题答案: 您可以使用sync.WaitGroup。引用链接的示例:
我已经安装了Android SDK最新版本和Eclipse。但我也想试试Android Studio。 我看过这个和这个帖子,但是那些解决方案改变了Android Studio(一旦下载并安装)使用的SDK实例。我想要的不是下载另一个SDK,当我已经在我的机器上安装了它。
问题内容: 我想知道如何在Spring MVC上引导我的应用程序? 我有一个初始化器: 我知道我们为什么需要以及如何使用它来引导应用程序。但是我不明白,如果没有文件(只有),怎么知道应该使用哪个servlet来引导应用程序? 依存关系 我在Spring核心中找到了此类。使用它来引导我的应用程序是否正确? http://docs.oracle.com/javaee/7/api/javax/servl