提出
オリジナルタイトルチェーン
問題解決のためのアイデア
全体的なアイデアは:最初のnビットを満たす回文数を生成し、それが素数であるか否かを判断します。
詳細:我々は、10 ^の長さを列挙 - 数(N 1)÷2の長さ、この番号の前に(N - 1)÷2 - 1、元の数を回文上に生成された新規の数に。例:私たちは3回文の長さを必要とするが、その後、我々は10から99までの数を列挙したい、です。私たちは、数が10を列挙することを前提としています。その後、101で生成された最後の番号。
ソース
#include <bits/stdc++.h>
using namespace std;
int a[1000010];
const int mod = 7;
inline int make(int tmp){
int ans = tmp;
tmp /= 10;
while(tmp > 0){
ans = ans * 10 + tmp % 10;
tmp /= 10;
}
return ans;
}
inline bool prime(int k){
if(k < 2)return false;
if(k == 2)return true;
for(int i = 2;i * i <= k;i++){
if(k % i == 0)return false;
}
return true;
}
int main(){
int n;
cin>>n;
if(n % 2 == 0){
if(n == 2){
cout<<1<<endl<<11;
return 0;
}
else {
cout<<0;
return 0;
}
}
n = (n - 1) / 2;
int h = pow(10,n),s = 0;
for(int i = h;i <= h * 10 - 1;i++){
int tmp = make(i);
if(prime(tmp)) a[++s] = tmp;
}
cout<<s<<endl;
for(int i = 1;i <= s;i++){
cout<<a[i]<<" ";
}
return 0;
}