如雨随风 2014-10-17 02:21 采纳率: 0%
浏览 772

用Unary predicates来搜寻第一个质数的问题。

#include
#include
#include
using namespace std;
bool isPrime (int number)
{

//ignore nagative sign
number=abs(number);

//0 and 1 is prime numbers
if(number==0||number==1){
   return ture;
 }
//find divisor that divides without a remainder
int divisor;
for(divisor=number/2;number%divisor!=0;--divisor){
    ;
}
return divisor==1;

}
主要是针对其中的逻辑关系和程序的运行不甚明白。假设,调用此判断式的值为24。24取绝对值后仍然为24,24也不等于0或1;程序进入for循环,divisor=14,number%divisor=0不满足循环条件,for循环终止,转而执行return divisor==1.这样这个判断式返回bool类型的true,则说明24是一个prime number,但是其实24不是一个primer number。请问其中的理解错在什么地方,最好能举个例子解释一下。
你的回答将对我产生积极的影响,谢谢!

  • 写回答

1条回答

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-05-27 00:17
    关注

    该回答引用ChatGPT-3.5,仅供参考,不保证完全正确

    在给定的代码中,有一处逻辑错误导致判断质数的结果不正确。问题出在以下这行代码上:

    return divisor==1;
    

    这行代码的意思是,如果在 for 循环中的任何一个迭代中,找到了一个能整除 number 的除数 divisor,那么函数就会返回 false。但是如果没有找到这样的除数,divisor 的值将会等于 1,这时函数会错误地返回 true,即将 number 判断为质数。


    要修正这个问题,可以修改代码如下:

    return divisor == 1 && number != 1;
    

    这样的修改可以确保在循环结束时,如果 divisor 的值为 1,同时 number 不等于 1,那么函数会返回 true,否则返回 false。这样就可以正确判断质数了。


    下面是一个例子来解释你提到的问题,以值为 24 的情况为例:

    1. 初始时,number 的值为 24,进入循环。
    2. 在第一次迭代中,divisor 的值为 12,24 % 12 等于 0,不满足循环条件。
    3. 循环结束,divisor 的值为 1。
    4. 程序执行 return divisor == 1,此时结果为 true,错误地将 24 判断为质数。

    通过修正后的代码,将会得到正确的结果,将 24 判断为非质数。

    评论

报告相同问题?

悬赏问题

  • ¥15 虚拟机打包apk出现错误
  • ¥30 最小化遗憾贪心算法上界
  • ¥15 用visual studi code完成html页面
  • ¥15 聚类分析或者python进行数据分析
  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝