LUCYprince 2025-03-26 21:44 采纳率: 50%
浏览 2
已结题

(标签-c++|关键词-#include)

pta上的素数对猜想题用c++写了以后总是在“只有一对”这里丢2分,实在找不出问题
题目如下:

img


pta评测如下:

img


代码如下:

#include <math.h>
#include <iostream>
using namespace std;
bool isprime(int n){
    if(n <= 1) return false;
    for (int i = 2; i <= sqrt(n); i++)
    {
        if (n % i == 0) return false;
    }
    return true;
}
int main(){
    int N;
    cin >> N;
    int res = 0;
    int a = 2;
    int b = 2;
    for (int i = 2; i < N; i++)
    {
        if (isprime(i))
        {
            a = b;
            b = i;
            if (b - a == 2) res++;
        }
    }
    cout<<res;
}

  • 写回答

2条回答 默认 最新

  • 道友老李 JWE233286一种基于机器视觉的水表指针读数识别及修正的方法 专利发明者 2025-03-26 21:44
    关注
    让【道友老李】来帮你解答,本回答参考gpt编写,并整理提供,如果还有疑问可以点击头像关注私信或评论。
    如果答案让您满意,请采纳、关注,非常感谢!
    问题可能出在for循环中的条件判断语句`for (int i = 2; i < N; i++)`上,因为`isprime(i)`函数是判断是否为质数的,所以应该在循环条件中只考虑可能为质数的数值范围。应将for循环改为`for (int i = 2; i <= N; i++)`。 修改后的代码如下:
    #include <math.h>
    #include <iostream>
    using namespace std;
    bool isprime(int n) {
        if(n <= 1) return false;
        for (int i = 2; i <= sqrt(n); i++) {
            if (n % i == 0) return false;
        }
        return true;
    }
    int main() {
        int N;
        cin >> N;
        int res = 0;
        int a = 2;
        int b = 2;
        for (int i = 2; i <= N; i++) {
            if (isprime(i)) {
                a = b;
                b = i;
                if (b - a == 2) res++;
            }
        }
        cout << res;
    }
    

    您可以尝试使用修改后的代码重新提交到pta上进行评测。

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

报告相同问题?

问题事件

  • 系统已结题 4月3日
  • 已采纳回答 3月26日
  • 创建了问题 3月26日