注册 登录
编程论坛 C++教室

如何解决?

btn 发布于 2021-01-31 13:31, 1215 次点击
题目描述
因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出范围 [a,b] (5 \le a < b \le 100,000,000)[a,b](5≤a<b≤100,000,000)( 一亿)间的所有回文质数。
输入输出样例
输入
5 500
输出
5
7
11
101
131
151
181
191
313
353
373
383
[code][/co#include<iostream>
#include<cmath>
using namespace std;
int main(){
    int num=0,sq,x,flag=0;
    long long int a,b,i;
    cin>>a>>b;
    for(i=a;i<=b;i++){
    sq=sqrt(i);
    for(int j=2;j<=sq;j++){
        if(i%j==0){
            flag=1;
            break;
            }
    }
            while((!flag)&&i){
                num=num*10+x;
                x=i%10;
                i/=10;
            }
                if(num=i)
                cout<<num<<endl;
        }
    return 0;
}de]
1 回复
#2
rjsp2021-02-01 08:57
连C语言都在上个世纪末,不再将变量一股脑定义到函数头部了。实在不明白这个恶习是谁传授的?

以下代码是根据你原来的算法修改而来,算法未变
程序代码:
#include <iostream>
using namespace std;

int main( void )
{
    unsigned a, b;
    cin >> a >> b;

    for( unsigned i=a; i<=b; ++i )
    {
        bool flag = true;
        for( unsigned j=2; flag && j*j<=i; ++j )
            flag = i%j!=0;

        if( flag )
        {
            unsigned num = 0;
            for( unsigned x=i; x!=0; x/=10 )
                num = num*10 + x%10;

            if( num == i )
                cout << i << endl;
        }
    }
}
1