【題解】ZeroJudge e539: 00967 – Circular

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=e539
【解題想法】質數表

#include <iostream>
using namespace std;
const int maxn = 1000005;
int prime[maxn];

int check(int x){
    //檢查 x 是否為循環質數
    if (prime[x] == 0){
        int digits = 0;
        int tmp = x;
        while (tmp) {
            tmp /= 10;
            digits++;
        }
        tmp = 1;
        for (int i = 1; i < digits; i++){
            tmp *= 10;
        }
        while (--digits){
            x = x % tmp * 10 + x / tmp;
            if (prime[x] == 1) return 0;
        }
        return 1;
    } else return 0;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    //質數表
    for (int i = 2; i < maxn; i++){
        if (prime[i] == 0){
            for (int j = i+i; j < maxn; j+=i){
                prime[j] = 1;
            }
        }
    }
    int n1, n2;
    while (cin >> n1){
        if (n1 == -1) break;
        cin >> n2;
        int ans = 0;
        for (int i = n1; i <= n2; i++){
            ans += check(i);
        }
        if (ans == 0) cout << "No Circular Primes.\n";
        else if (ans == 1) cout << "1 Circular Prime.\n";
        else cout << ans << " Circular Primes.\n";
    }
    return 0;
}
分享本文 Share with friends