給出一個(gè)區(qū)間[a, b],,計(jì)算區(qū)間內(nèi)“神奇數(shù)”的個(gè)數(shù)。 神奇數(shù)的定義:存在不同位置的兩個(gè)數(shù)位,,組成一個(gè)兩位數(shù)(且不含前導(dǎo)0),,且這個(gè)兩位數(shù)為質(zhì)數(shù)。 比如:153,,可以使用數(shù)字3和數(shù)字1組成13,,13是質(zhì)數(shù),滿足神奇數(shù),。同樣153可以找到31和53也為質(zhì)數(shù),,只要找到一個(gè)質(zhì)數(shù)即滿足神奇數(shù)。 輸入描述:輸入為兩個(gè)整數(shù)a和b,,代表[a, b]區(qū)間 (1 ≤ a ≤ b ≤ 10000),。 輸出描述:輸出為一個(gè)整數(shù),表示區(qū)間內(nèi)滿足條件的整數(shù)個(gè)數(shù) 輸入例子:11 20 輸出例子:6 #include <iostream> #include <stdlib.h> #include <algorithm> #include <math.h> #include <vector> using namespace std; //判斷數(shù)是不是素?cái)?shù)(質(zhì)數(shù)) bool isPrime(int num) { for (int i = 2;i <= sqrt(num);i++) { if (num%i == 0) return false; } return true; } int main() { int a, b, count = 0; cin >> a >> b; if(b<=10) { cout << 0; return 0; } for(int i=a;i<=b;i++) { bool isS = false; vector<int> arr; int tmp = i; while (tmp) { arr.push_back(tmp % 10);//將每個(gè)數(shù),,轉(zhuǎn)成數(shù)組 tmp /= 10; } //判斷每個(gè)數(shù)是不是神奇的數(shù) for (int j = 0;j<arr.size();j++) { if(arr[j]==0) { continue; } //j:第一位,,個(gè)位數(shù),k:第二位,,十位數(shù) for(int k=0;k<arr.size();k++) { if(k==j) { continue; } //這個(gè)兩位數(shù) int now = arr[j] * 10 + arr[k]; if(isPrime(now)) { //一旦是神奇的數(shù),,那么就不需要檢測(cè)j確定、k循環(huán)的情況了 isS = true; break; } } //如果已經(jīng)是神奇的數(shù),,就不用再檢測(cè)后面不同j的情況了 if (isS) { count++; break; } } } cout << count; return 0; } |
|