一个小菜鸡O-O 2024-11-17 21:31 采纳率: 0%
浏览 42

#C++#判断a是否是素数

【问题描述】

编写一个函数isprime(n).判断整数n是否为素数.编写程序使用此函数,当输入一个整数时,对它进行判断,当为素数时,输出1.否则,输出0.
【输入形式】

控制台输入一个整数.
【输出形式】

控制台输出判断结果0或者1.
【样例输入】

45
【样例输出】

0
【样例说明】

45非素数,故输出为0

#include <iostream>
#include <cmath>
using namespace std;
int main()
{
    int a,n;
    cin>>a;
    int isprime(int a); 
    if(a!=1&&a!=0){
    cout<<isprime(a);}
    else cout<<0;
    return 0;
}
int isprime(int a)                 // 判断是否为素数的子函数
{
    int b=1;
    int n=2;
    if(a<0){
    a=-a;
    for(;n<sqrt(a);n=n+1){
    if(a%n==0){
    b=0;
    break;}
    }
}
    else     for(;n<sqrt(a);n=n+1){
    if(a%n==0){
    b=0;
    break;}
    }
    return b;    
    }


请问哪里错了

  • 写回答

1条回答 默认 最新

  • 关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    您的代码在判断素数的过程中存在一些错误和不必要的复杂性。我会帮助您纠正并简化它。以下是修改后的代码:

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    bool isprime(int n) {      // 判断是否为素数的子函数
        if (n <= 1) return false;  // 素数定义为大于1的自然数,因此小于等于1的数不是素数
        for (int i = 2; i <= sqrt(n); ++i) {  // 只需检查到n的平方根即可
            if (n % i == 0) return false;  // 若n能被除自身和1之外的数整除,则不是素数
        }
        return true;  // 若通过所有检查,则为素数
    }
    
    int main() {
        int a;
        cin >> a;  // 输入整数a
        cout << isprime(a) << endl;  // 输出判断结果,若为素数输出1,否则输出0(因为函数返回true或false)
        return 0;
    }
    

    主要的改动有以下几点:

    1. 将函数返回类型改为 bool,这样可以直接返回 truefalse,与题目要求的输出匹配。
    2. 优化了循环条件,从 int n=2 开始检查,而不是不必要的变量赋值。这样可以简化代码并提高效率。您原先的代码在这个部分有一些冗余和不必要的复杂性。新的代码只需检查到 sqrt(n) 即可确定一个数是否为素数。这是因为如果 n 不是素数,那么它必定有一个因子不大于它的平方根。因此只需检查到平方根即可。这种方法可以大大减少计算量。
    3. 直接在 main() 函数中调用 isprime() 函数并输出结果,无需额外的判断和输出逻辑。
    评论

报告相同问题?

问题事件

  • 创建了问题 11月17日