2 条题解

  • 0
    @ 2024-4-9 21:37:23

    #include <iostream> #include <cmath>

    bool isPrime(int n) { if (n <= 1) return false; // 0 和 1 不是质数 if (n <= 3) return true; // 2 和 3 是质数 if (n % 2 == 0 || n % 3 == 0) return false; // 排除能被 2 和 3 整除的数

    // 只需检查到 sqrt(n),因为如果 n 不是质数,它必有一个因子小于或等于 sqrt(n)
    for (int i = 5; i * i <= n; i += 6) {
        if (n % i == 0 || n % (i + 2) == 0) return false;
    }
    return true;
    

    }

    int secondLargestFactor(int n) { int factor = 1; // 首先找到最小的因子(除了 1) for (int i = 2; i <= sqrt(n); ++i) { if (n % i == 0 && n / i > factor) { factor = n / i; } } return factor; }

    int main() { int n; std::cin >> n;

    if (isPrime(n)) {
        std::cout << "YES" << std::endl;
    } else {
        int secondLargest = secondLargestFactor(n);
        std::cout << secondLargest << std::endl;
    }
    
    return 0;
    

    }

    信息

    ID
    98
    时间
    1000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    161
    已通过
    49
    上传者