回文质数 C++

【问题描述】
因为151即是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。
写一个程序来找出大过a的最小的回文质数。
【输入格式】
第 1 行: 一个整数 a .(a<100000)
【输出格式】
输出一个回文质数。
【输入样例】
10301
【输出样例】
10501

#include"stdio.h"
#include"string.h"
const long long ma = 2000000;
long long num[ma],nn[ma];
bool huiwen(long long n)
{
char str[10];
long long len,i,k = 0;
while (n)
{
str[k++] = n%10 + '0';
n /= 10;
}
for (i = 0; i < k/2; i ++)
{
if(str[i] != str[k - i - 1])return false;
}
return true;
}
int main()
{
long long len = 0,a,i,j;
memset(num,0,sizeof(num));
memset(nn,0,sizeof(nn));
for (i = 2; i < ma; i++)
{
for (j = i; j*i < ma; j++)
num[i*j] = 1;
}
for (i = 2; i < ma; i++)
if(num[i] == 0)nn[len++] = i;
while (~scanf("%lld",&a))
{
for (i = 0; i < len; i++)
{
if(nn[i] > a && huiwen(nn[i]))
{
printf("%lld\n",nn[i]);
break;
}
}
}
return 0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-16
1先检查回文,不是就不检查是否质数了!
2检查是否质数
1比2快的多!
第2个回答  2013-05-14
#include <iostream>
using namespace std ;
int main()
{
int a ;
cin >> a ;
while ( a<100000 )
{
a++ ;
//check prime
int i;
for( i=2;i<=a/2;i++ )
{
if ( a % i == 0 )
{
break ;
}
}
if ( i > a/2 ) //是质数
{
//check 回文
char data[32] ; //用来存储该数
int len ;
sprintf( data , "%d" , a );
len=strlen(data);
for( i=0;i<len/2;i++ )
{
if ( data[i] != data[len-i-1] )
{
break ;
}
}
if ( i>=len/2 )
{
cout << a <<endl ;
break ;
}
}
}
return 0;
}本回答被提问者采纳

C++ (算术)回文质数
include <stdio.h>#include <stdlib.h>#include <math.h>\/**判断m是否为质数@return 1:质数,0:不是质数**\/int ss(int m){ for(int i=2;i<=sqrt(m);i++) if(! (m%i)) return 0; return 1;}\/**判断m是否为回文数@return 1:回文,0:不是回文**\/int huiwen(int ...

回文数详细资料大全
还有更奇妙的回文算式,请看: 12×231=132×21(积是2772) 12×4032=2304×21(积是48384) 这种回文算式,连乘积都是回文数。 四位的回文数有一个特点,就是它决不会是一个质数。设它为abba,那它等于a*1000+b*100+b*10+a,1001a+110b。能被11整除。 六位的也一样,也能被11整除 还有,人们借助电子计算...

键盘输入一个正整数,程式设计判断其是否为素数(即质数)
键盘输入一个正整数,程式设计判断其是否为素数(即质数)#include<stdio.h> intmain(){ intn1,nm,i,j,flag,count=0;do{ printf("InputSTARTandEND=?");scanf("%d%d",&n1,&nm);\/*输入求素数的范围*\/ }while(!(n1>0&&n1<nm));\/*输入正确的范围*\/ printf("...PRIMETABLE(%d--%d)...

C语言问题
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复...

C++程序运行时间超时,求大神修改,学渣坐等,其他方法也可以。
将函数 bool isHuiWen(int n){ int tmp[10];int i = 0;while (n > 0){ tmp[i++] = n % 10;n \/= 10;} \/\/huiWenLen = i;for (int j = 0; j < i; j++)if (tmp[j] != tmp[i - j - 1])return false;return true;} 改为这样试试:bool isHuiWen(int n){ int ...

相似回答