回文素数
时间: 1ms 内存:128M
描述:
输入一个数n,输出n以内所有的回文素数。回文素数,即既是素数,又是回文数,从前往后、从后往前看一个样。例373。
输入:
大于10的正整数n
输出:
n以内所有的回文素数
示例输入:
500
示例输出:
2 3 5 7 11 101 131 151 181 191 313 353 373 383
提示:
参考答案(内存最优[800]):
#include<stdio.h>
int huiwen(int n)
{
int i=1,bo=1;
int num1=n,num2=n;
while(num1>=10)
{
num1%=10;i++;
}
int*a=new int[i];
i=0;
while(num2>0)
{
a[i++]=num2%10;
num2/=10;
}
for(int j=0;j<i/2;j++)
{
if(a[j]!=a[i-1])
{
bo=0;break;
}
}
if(bo)
printf("%d ",n);
return 0;
}
int prime(int n)
{
int bo;
for(int i=2;i<=n;i++)
{
bo=1;
for(int j=2;j*j<=i;j++)
{
if(i%j==0)
{
bo=0;
break;
}
}
if(bo)
{
huiwen(i);
}
}
return 0;
}
int main()
{
int n;
printf("");
scanf("%d",&n);
printf("");
prime(n);
printf("\n");
return 0;
}
参考答案(时间最优[0]):
#include<iostream>
#include<cmath>
using namespace std;
bool isPalindrome(int);
int reverse(int);
bool isPrime(int);
int main()
{
int m,n;
cin>>n;
for(m=2;m<n;++m)
{
if(isPalindrome(m)&&isPrime(m))
cout<<m<<' ';
}
cout<<endl;
return 0;
}
bool isPrime(int n)
{
bool prime=true;
int k=int(sqrt(n));
for(int i=2;i<=k;i++)
{
if(n%i==0)
{
prime=false;
break;
}
}
return prime;
}
bool isPalindrome(int n)
{
bool palindrome=false; //先默认不是回文数
if(reverse(n)==n)
palindrome=true;
return palindrome;
}
int reverse(int x)
{
int m=0;
while(x>0)
{
m=m*10+x%10;
x=x/10;
}
return m;
}
题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。
