蒟蒻求助30pts
查看原帖
蒟蒻求助30pts
1028403
封禁用户楼主2023/9/14 22:57

就知道肯定超时。。。

但实在不知道咋写了。。。

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int MOD = 998244353;
bool isPrime(int x) { // 质数判断
    if (x < 2) return false;
    for (int i = 2; i * i <= x; i++) {
        if (x % i == 0) return false;
    }
    return true;
}
bool isPerfectSquare(int num) { // 完全平方数
    if (num == 1)
        return true;
    int start = 2;
    int end = num;
    int mid;
    while (start <= end) {
        mid = start + (end - start) / 2;
        if (mid == num / mid && num % mid == 0)
            return true;
 
        if (mid > num / mid)
            end = mid - 1;
        else
            start = mid + 1;
    }
    return false;
}
bool check(int x) { // 各位之和为质数
    int sum = 0;
    while (x) {
        int t = x % 10;
        sum += t;
        x /= 10;
    }
    if (isPrime(sum)) return true;
    return false;
}
signed main()
{
    int l, r;
    cin >> l >> r;
    int mul = 1;
    for (int i = l; i <= r; i++) {
        if (check(i) && isPerfectSquare(i)) {
            mul *= i;
            mul %= MOD;
        }
    }
    if (mul == 0) cout << 0;
    else cout << mul;
    return 0;
}
2023/9/14 22:57
加载中...