iamaretardiamaretard @ 2023-08-08 16:22:28
#include <iostream>
#include <stdlib.h>
#include <bitset>
#include <iomanip>
#include <cmath>
#include <algorithm>
#include <numeric>
#include <vector>
#include <string>
#include <cstdio>
#include <cstring>
using namespace std;
const int maxn = 1e8 + 10;
bitset <maxn> pri;
int chosen[maxn];
int pp = 0;
//欧拉
inline void eular(int a) {
for (int i = 2; i <= a ; i += 1) {
if (!pri[i])
chosen[++pp] = i;
for (int j = 1; j <= pp && chosen[j] *i <= a; j++) {
pri[i * chosen[j]] = 1;
if (!i % chosen[j] )
break;
}
}
}
//判断回文数
inline bool access(int e) {
int temp = e, ans = 0;
while (temp) {
ans += (temp % 10);
temp /= 10;
if (temp > 0)
ans *= 10;
}
return (ans == e ? 1 : 0);
}
int main() {
int b, a, p;
scanf ("%d %d", &b, &a);
eular(a);
for (int i = 1; i <= pp; i++) {
if (b <= chosen[i]) {
p = i;
break;
}
}
for (int i = p; i <= pp; i++) {
if (access(chosen[i]))
printf("%d\n", chosen[i]);
}
}
by iamaretardiamaretard @ 2023-08-08 16:23:07
感觉还能优化
by Argvchs @ 2023-08-08 16:24:51
@iamaretardiamaretard 打表
by yzm0325 @ 2023-08-08 16:35:22
@iamaretardiamaretard
#include <iostream>
using namespace std;
int a, b, num;
bool prime(int);
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> a >> b;
if(a <= 5 && b >= 5) cout << 5 << "\n";
if(a <= 7 && b >= 7) cout << 7 << "\n";
if(a <= 11 && b >= 11) cout << 11 << "\n";
for(int d1 = 1; d1 <= 9; d1 += 2)
for(int d2 = 0; d2 <= 9; d2++) {
int num = 100 * d1 + 10 * d2 + d1;
if(num < a) continue;
if(num > b) return 0;
if(prime(num)) cout << num << "\n";
}
for(int d1 = 1; d1 <= 9; d1 += 2)
for(int d2 = 0; d2 <= 9; d2++)
for(int d3 = 0; d3 <= 9; d3++) {
int num = 10000 * d1 + 1000 * d2 + 100 * d3 + 10 * d2 + d1;
if(num < a) continue;
if(num > b) return 0;
if(prime(num)) cout << num << "\n";
}
for(int d1 = 1; d1 <= 9; d1 += 2)
for(int d2 = 0; d2 <= 9; d2++)
for(int d3 = 0; d3 <= 9; d3++)
for(int d4 = 0; d4 <= 9; d4++) {
int num = 1000000 * d1 + 100000 * d2 + 10000 * d3 + 1000 * d4 + 100 * d3 + 10 * d2 + d1;
if(num < a) continue;
if(num > b) return 0;
if(prime(num)) cout << num << "\n";
}
return 0;
}
bool prime(int x) {
if(x == 1) return 0;
for(int i = 2; i * i <= x; i++)
if(x % i == 0) return 0;
return 1;
}
深基的方法
by iamaretardiamaretard @ 2023-08-09 10:05:26
@zym0325 谢谢