爱电摇的小码农 2025-05-27 22:33 采纳率: 93.8%
浏览 21
已结题

c++质数求和报错,询问原因

起先,我在安安心心地做题目
是这样的

描述

对于给定的 n,求比 n小的质数中最大的一个。
质数是指一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数。

输入描述

一个整数n。

输出描述

一个整数,即题目要求的解

输入
100
输出
97
Tips
对于100%的数据 10 <= n <= 10000

我起初以为这很简单
结果当我写完以下代码段:

#include <bits/stdc++.h>
using namespace std;

int main() {
    int n;
    cin >> n;
    int maxnum = 0;
    for (int i = n-1; i >= 2; i--) {
        int flag = 1;
        for (int j = 2;j <= sqrt(i); j++) {
            if (i % j == 0) {
                flag = 0;
                break;
            }
        }
        if (flag) {
            maxnum = i;
            break;
        }
    }
    cout << maxnum;
    return 0;
}
--OjError:
  Test9:Wrong Answer

有没有人知道怎么一回事啊,测试数据都通过了,问了AI也说可以,就是通过不了。
我真的没办法了!

  • 写回答

8条回答 默认 最新

  • 阿里嘎多学长 2025-05-27 22:33
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解答

    你遇到的问题是C++代码中求质数的错误,下面是可能的原因:

    1. 代码逻辑错误:你可能没有正确地实现质数的判断逻辑,例如没有正确地检查是否为质数。
    2. 代码实现错误:你可能没有正确地实现质数的求和逻辑,例如没有正确地将质数累加。
    3. 输入输出错误:你可能没有正确地输入或输出数据,例如输入的数据类型不正确或输出的数据类型不正确。

    以下是一个简单的C++代码,用于求比n小的质数中最大的一个:

    #include <iostream>
    #include <vector>
    
    using namespace std;
    
    bool isPrime(int n) {
        if (n <= 1) return false;
        for (int i = 2; i * i <= n; i++) {
            if (n % i == 0) return false;
        }
        return true;
    }
    
    int main() {
        int n;
        cin >> n;
        int maxPrime = 0;
        for (int i = 2; i < n; i++) {
            if (isPrime(i)) {
                maxPrime = i;
            } else {
                break;
            }
        }
        cout << maxPrime << endl;
        return 0;
    }
    

    这个代码使用了一个 helper 函数 isPrime 来判断一个数是否为质数,然后使用一个循环来找到比 n 小的质数中最大的一个。

    如果你仍然遇到问题,可以提供更多的代码信息或错误信息,我将尽力帮助你解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月11日
  • 已采纳回答 7月11日
  • 创建了问题 5月27日