Eletronic_Monkey @ 2024-10-22 23:27:16
#include<stdio.h>
void search (int a);
int b,c;
int main()
{
int number,d1,d2,d3,d4,d5;
scanf("%d %d",&b,&c);
for (d1 = 1; d1 <= 9; d1+=2) {
number=d1;
search(number);
}
for (d1 = 1; d1 <= 9; d1+=2) {
number = 10*d1 +d1 ;
search(number);
}
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
number = 100*d1 + 10*d2 +d1 ;
search(number);
}
}
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
number = 1000*d1 + 100*d2 +10*d2+d1 ;
search(number);
}
}
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0;d3<= 9;d3++) {
number = 10000*d1+1000*d2+100*d3+10*d2 +d1;
if(number>c)
{
break;
}
search(number);
}
}
}
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0;d3<= 9;d3++) {
number = 100000*d1+10000*d2+1000*d3+100*d3+10*d2 +d1;
search(number);
}
}
}
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0; d3 <= 9; d3++) {
for(d4=0;d4<=9;d4++)
number = 1000000*d1+100000*d2+10000*d3+1000*d4+100*d3+10*d2+d1;
search(number);
}
}
}
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0; d3 <= 9; d3++) {
for(d4=0;d4<=9;d4++)
number = 10000000*d1+1000000*d2+100000*d3+10000*d4+1000*d4+100*d3+10*d2+d1;
search(number);
}
}
}
for (d1 = 1; d1 <= 9; d1+=2) {
for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0; d3 <= 9; d3++) {
for(d4=0;d4<=9;d4++){
for(d5=0;d5<=9;d5++){
number = 100000000*d1+10000000*d2+1000000*d3+100000*d4+10000*d5+1000*d4+100*d3+10*d2+d1;
search(number);
}
}
}
}
}
return 0;
}
void search (int a)
{
int count=0;
for(int t=2;t<a;t++)
{
if(a%t==0)
{
count++;
}
}
if(count==0&&a>=b&&a<=c)
{
printf("%d\n",a);
}
}
by one_four_three @ 2024-10-22 23:47:51
@Hope_to_grow 求关注Thanks♪(・ω・)
#include<bits/stdc++.h>
using namespace std;
int a,b;
bool isprime(int x){//判断素数
if(x==1) return false;
for(int i=2;i<=sqrt(x);i++){
if(x%i==0) return false;
}
return true;
}
bool isPalindromes(int x){//判断回文
int y=x;
int tmp=0;
while(y){
tmp=tmp*10+y%10;
y/=10;
}
if(tmp==x) return true;
else return false;
}
int main(){
cin>>a>>b;
if(b>=9999999) b=9999999;//最大的回文质数不超过9999999
if(a%2==0) a+=1;
for(int i=a;i<=b;i+=2){
if(!isPalindromes(i)) continue;//先判回文会快一点
else if(isprime(i)) cout<<i<<endl;
}
return 0;
}
by cengzh @ 2024-10-22 23:47:57
哪里都能看到你
by one_four_three @ 2024-10-22 23:48:47
@Hope_to_grow 因为不会筛素数,所以就这样写了
by Eletronic_Monkey @ 2024-10-23 00:08:34
@cengzh 呜呜呜
by cengzh @ 2024-10-23 00:11:12
其实你这个打法不是不行,问题在于你得到的回文数不一定按大小顺序排列,因此输出顺序时会出错,如果要这样打建议用数组存一下再用sort排序啊七七八八的。
by cengzh @ 2024-10-23 00:14:45
另外程序也有很多改进的地方: 1.
void search (int a)
{
int count=0;
for(int t=2;t<a;t++)
{
if(a%t==0)
{
count++;
}
}
if(count==0&&a>=b&&a<=c)
{
printf("%d\n",a);
}
}
这一段循环条件写为t*t<=a即可,原因自己想想。if判断出来了可以直接return。还有范围的判断放在前面也可以节省时间。
2. 生成回文数的时候不需要考虑位数为偶数的情况,题解好像有证明。另外没有考虑1不是质数的情况(但数据好像没有卡这一点)
by cengzh @ 2024-10-23 00:22:01
好像生成的回文数也不全,再仔细检查一下吧
by Eletronic_Monkey @ 2024-10-23 00:38:31
@cengzh 好的,感谢大佬!
by StrY_Problems @ 2024-10-23 12:39:17
你这个循环层数也太多了吧,简化简化。