第一篇文章Hello World LOL
我开始学习C++,做一些挑战。我发现的一个是“找到下一个素数”给定一个整数,做一个函数来找到下一个连续的素数,例如如果给定12返回13,如果给定24返回29,如果给定一个素数返回那个。我不明白为什么下面的代码块不起作用(我的猜测是其中的两个条件
int nextPrime(int num) {
while (num % 2 !=0 && num %3 != 0 && num %4 != 0 && num %5 != 0 && num %6 != 0 && num %7 != 0 && num %8 != 0 && num %9);
++num;
return num;
}
这是一个相对容易的任务,但事实上,我不知道为什么它不工作困扰我更多的事实,它不工作。任何帮助你可爱的互联网人可以提供是最受欢迎的。
4条答案
按热度按时间6mzjoqzu1#
public int findDuplicate(int i=2; i<=n;i++){ if(n%i==0){ return false }
返回true
px9o7tmv2#
你要做的是从下一个数字开始检查每个数字到给定的数字,看看它是否是素数。然后返回第一个素数
1.在nextPrime()函数中,我们从下一个数字开始取一个数字到给定的数字。
1.然后在isPrime()中,检查它是否是素数。
1.如果是,则返回号码。否则继续下一个。
xfb7svmp3#
e3bfsja24#
它不起作用的原因是因为你想在
num
不是素数的时候增加它。当它不是质数时,它可以被某个数整除。如果某个值可以被N整除,那么num % N == 0
,但是你测试的是非零值。相反,你想做:
此外,您确实在while后面放了一个分号,导致它无限循环,而没有每次更改num。或者,如果num可以被任何给定的数字整除,只需将num递增一次。
还要注意,不需要检查num是否能被合数整除;如果是,那么你已经发现它可以被它的一个因子整除。例如,检查它是否能被4整除是没有意义的,因为你已经发现在这种情况下它能被2整除。
因此,另一项改进是:
最后,你必须意识到这是一种相当糟糕的编码方式,因为你只是以这种方式硬编码应用程序中的所有素数,在这种情况下,你还不如把它们都放在一个表中,然后找到第一个大于或等于起始值的素数。