社区讨论

喜闻乐见之爆0(求大佬救救小登)

P1217[USACO1.5] 回文质数 Prime Palindromes参与者 2已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@m206pfi8
此快照首次捕获于
2024/10/08 16:33
去年
此快照最后确认于
2025/11/04 17:38
4 个月前
查看原帖
CPP
#include <iostream>  
#include <vector>  
#include <algorithm>  
#include <cmath>  
using namespace std;

bool a(int num) {
    if (num <= 1) return false;
    if (num == 2) return true;
    if (num % 2 == 0) return false;
    for (int i = 3; i <= sqrt(num); i += 2) {
        if (num % i == 0) return false;
    }
    return true;
}

int main() {
    int m, n;
    vector<int> numbers;
    cin >> m >> n;
    int range = (n > 1000000) ? 2 : (n > 10000) ? 1 : 0;
    if (n > 100) {
        switch (range) {
        case 2:
            for (int i = 1; i <= 9; i++) {
                for (int j = 0; j <= 9; j++) {
                    for (int q = 0; q <= 9; q++) {
                        for (int p = 0; p < 9; p++) {
                            int sum = 1000000 * i + 100000 * j + 10000 * q + 1000 * p + 100 * q + 10 * j + i;
                            if (sum >= n && sum <= m && a(sum)) {
                                numbers.push_back(sum);
                            }
                        }
                    }
                }
            }
            break;
        case 1:
            for (int j = 1; j <= 9; j++) {
                for (int q = 0; q <= 9; q++) {
                    for (int p = 0; p <= 9; p++) {
                        int sum = 10000 * j + 1000 * q + 100 * p + 10 * q + j;
                        if (sum >= n && sum <= m && a(sum)) {
                            numbers.push_back(sum);
                        }
                    }
                }
            }
            break; 
        case 0:
            for (int q = 1; q <= 9; q++) {
                for (int p = 0; p <= 9; p++) {
                    int sum = 100 * q + 10 * p + q;
                    if (sum >= n && sum <= m && a(sum)) {
                        numbers.push_back(sum);
                    }
                }
            }
            break;
        }
    }
    else {
        if (n <= 100 && n >= 11) {
            numbers.push_back(5);
            numbers.push_back(7);
            numbers.push_back(11);
        }
        if (n < 11 && n >= 7) {
            numbers.push_back(5);
            numbers.push_back(7);
        }
        if (n < 7 && n >= 5) {
            numbers.push_back(5);
        }
    }
    sort(numbers.begin(), numbers.end());
    for (int num : numbers) {
        cout << num << endl;
    }
    return 0;
}
CPP
#include <iostream>  
#include <vector>  
#include <algorithm>  
#include <cmath>  
using namespace std;

bool a(int num) {
    if (num <= 1) return false;
    if (num == 2) return true;
    if (num % 2 == 0) return false;
    for (int i = 3; i <= sqrt(num); i += 2) {
        if (num % i == 0) return false;
    }
    return true;
}

int main() {
    int m, n;
    vector<int> numbers;
    cin >> m >> n;
    int range = (n > 1000000) ? 2 : (n > 10000) ? 1 : 0;
    if (n > 100) {
        switch (range) {
        case 2:
            for (int i = 1; i <= 9; i++) {
                for (int j = 0; j <= 9; j++) {
                    for (int q = 0; q <= 9; q++) {
                        for (int p = 0; p <= 9; p++) {
                            int sum = 1000000 * i + 100000 * j + 10000 * q + 1000 * p + 100 * q + 10 * j + i;
                            if (sum >= n && sum <= m && a(sum)) {
                                numbers.push_back(sum);
                            }
                        }
                    }
                }
            }
            break;
        case 1:
            for (int j = 1; j <= 9; j++) {
                for (int q = 0; q <= 9; q++) {
                    for (int p = 0; p <= 9; p++) {
                        int sum = 10000 * j + 1000 * q + 100 * p + 10 * q + j;
                        if (sum >= n && sum <= m && a(sum)) {
                            numbers.push_back(sum);
                        }
                    }
                }
            }
            break; 
        case 0:
            for (int q = 1; q <= 9; q++) {
                for (int p = 0; p <= 9; p++) {
                    int sum = 100 * q + 10 * p + q;
                    if (sum >= n && sum <= m && a(sum)) {
                        numbers.push_back(sum);
                    }
                }
            }
            break;
        }
    }
    else {
        if (n <= 100 && n >= 11) {
            numbers.push_back(5);
            numbers.push_back(7);
            numbers.push_back(11);
        }
        if (n < 11 && n >= 7) {
            numbers.push_back(5);
            numbers.push_back(7);
        }
        if (n < 7 && n >= 5) {
            numbers.push_back(5);
        }
    }
    sort(numbers.begin(), numbers.end());
    for (int num : numbers) {
        cout << num << endl;
    }

    return 0;
}
本地运行直接返回空,感觉思路没啥问题啊(大悲) 早知道不头铁用switch-case语句了

回复

3 条回复,欢迎继续交流。

正在加载回复...