查找输入值以下的最大素数

时间:2019-10-24 01:35:43

标签: c loops

首先让我说我是一个初学者。我正在尝试定义一个函数,该函数计算/识别输入值以下的最大素数。但是,我目前的方法是有缺陷的。

我尝试实现嵌套的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的输出。

代码未生成任何错误消息

注意:这是我第一次使用此平台,如果问题的格式不正确,我将由衷的歉意

1 个答案:

答案 0 :(得分:0)

问题是您在外部循环中not resetting the count to 0
这样可以解决问题。

进一步添加, 代码中还可以进行其他一些优化。

您无需运行内部循环maximum次,only n times就足够了,因为您正在检查whether n is prime or not.

您可以将break condition inside the inner for loop用于计数超过2的那些对象,以避免进一步的迭代。

int prime(int maximum)
{
int i, j, count = 0, n;

for (i = 1; i < maximum; i++) {
        count = 0;  # <-----  Reset it to 0.
        n = maximum - i; /* generating number below input value*/ 
        for (j = 1; j <= n; j++) {
            if (n % j == 0) { /* testing whether or not it is prime */
                count++;
                if(count > 2) # to avoid further iterations as we know, this number is not prime.
                   break;
            } 
        } if(count == 2) {
                break;
            } 
    } 
    return n;
}