回文素数

回文素数

时间: 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;
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注