发布网友 发布时间:2022-11-20 02:37
共3个回答
热心网友 时间:2023-10-10 12:16
删除maximum = maximum - 1;——在这里无错,但最大的就是质数呢?
把for (j = 2; j < i; j++)改成for (j = 2; j*j<= i; j++)——大于i方根的整数无须检查,因为肯定不能整除,白白浪费时间资源。
把if (i % j == 0)的体i--;改为break;——i--;有漏洞,比如25%7!=0,但25%5==0,就是说无大数因子并不能保证无小一些的因子,所以每次的j都得从2开始检查。
把return i;改成if(j*j>=i) return i;——确定是质数再返回,逻辑上与前面的改动对应
在最后一个}前加一句return 0;——个失败返回0,尽管肯定能找到一个最大的质数而不会执行这一条,但从函数定义严密性要求应该有这一条,否则函数返回路径就不全,有些要求严格的编译器恐怕就不会过或提出警告!
热心网友 时间:2023-10-10 12:17
不是不适用于10000以上的数字,而是你的逻辑根本就是错的,你可以试试传入28,看看结果是多少,代码修改如下热心网友 时间:2023-10-10 12:17
我在这边复制你的代码,测试一下没有问题啊