【发布时间】:2019-10-24 01:35:43
【问题描述】:
首先让我说我是初学者。我正在尝试定义一个函数来计算/识别输入值以下的最大素数。但是,我目前的方法是有缺陷的。
我尝试过实现嵌套的 for 循环。从输入下面的一个到 1 生成数字,随后通过第二个循环运行每个数字,以识别它是否是素数。如果它是素数(如果 count == 2),该函数应该返回第一个循环 (n) 生成的数字
我被允许假设输入将是一个大于 2 的正整数。
int prime(int maximum)
{
int i, j, count = 0, n;
for (i = 1; i < maximum; i++) {
n = maximum - i; /* generating number below input value*/
for (j = 1; j <= maximum; j++) {
if (n % j == 0) { /* testing whether or not it is prime */
count++;
}
} if(count == 2) {
break;
}
}
return n;
}
我希望输入 10 会产生 7 的输出,输入 30 会产生 29 的输出,输入 100 会产生 97 的输出。
但是,该函数当前始终生成 1 的输出。
代码没有产生任何错误信息
注意:这是我第一次使用这个平台,如果我的问题格式不正确,我最诚挚的歉意
【问题讨论】:
-
暂时忘记您使用的计算机语言。你对你的算法/方法有信心吗?您需要先确保它是合乎逻辑的,然后再实现 C。
-
拿一个调试器或纸笔,一步一步地用一些固定的输入来完成你的函数,写下或观察每一步中所有变量的值。看
count特别近。那么你应该意识到你的逻辑错误。 -
你应该知道
n % 1 == 0 for ALL n > 0- 你可能*不想开始j循环。 -
新话“负责定义”。古语“我的作业是”。
-
检查
count的值。它不会做你认为它做的事情。