我在学校有这个任务;我们要在java中编写一个简单的程序/方法/算法,它让我们获取两个数字输入和两个输入之间范围内所有数字的输出计数,这些数字可以被2或3或5分割。
分配非常简单,因为您可以遍历范围内的所有数字,并在满足所有条件时递增计数器。
但我们还获得了10个测试输入和一个评估算法效率的计时器。由于八个值<1,所以前八个落空了。 10 ^ 6。但是最后两个测试输入值是&lt; 10 ^ 18,我的算法失败了。
所以我开始考虑素数计数功能的方向并筛选Eratosthenes,但我的头开始受伤了。关于更快但仍然足够简单的算法的任何想法?
答案 0 :(得分:4)
我想出了类似的东西
public static void main(String[] args) {
long a = 123456789012345678L, b = 876543210987654321L;
long score = getCount(b) - getCount(a - 1);
System.out.println("Divisible by 2 or 3 or 5: " + score);
}
public static long getCount(long end) {
return (end / 2) + (end / 3) + (end / 5) - ((end / 6) + (end / 10) + (end / 15)) + (end / 30);
}
解决方案: