我在学校有这样的作业,我们要用java编写一个简单的程序/方法/算法,它让我们接受两个数字输入和输出计数,在两个输入之间的范围内,这些数字可以除以2、3或5。
赋值相当简单,因为只要满足所有条件,就可以迭代范围内的所有数字,并增加计数器。
但是我们也得到了10个测试输入和一个计时器来评估我们算法的效率。前八次失败,因为这八个值都< 10^6。但是最后两个测试输入值< 10^18,我的算法失败了。
于是我开始思考素数计数函数和筛子埃拉托斯提尼,但是我的头开始受伤了。对一个更快但仍然很简单的算法有什么想法吗?
发布于 2014-11-07 17:47:10
我想出了这样的东西
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);
}解决办法:
https://stackoverflow.com/questions/26806990
复制相似问题