程序基本算法习题解析 求出100之内的所有可逆素数

题目:

可逆素数是指一个素数将其各位数字的顺序倒过来构成的反序数也是素数,求出100之内的所有可逆素数。

附上代码:

// Chapter5_4.cpp : Defines the entry point for the application.
// 求出100之内的所有可逆素数
// 可逆素数是指一个素数将其各位数字的顺序倒过来构成的反序数也是素数

#include "stdafx.h"
#include<iostream>
#include<math.h>
using namespace std;
const int N = 99;
//判断是否为素数,是素数返回1,不是素数返回0
int isPrime(int x)
{
	//因为后面的for循环里面有sq,i的初始值又是从2开始,因此将2,3单独进行判断
	if(x==2 || x==3)  
		return 1;
	else
	{
		int sq = sqrt(x);
		for(int i=2;i<=sq;i++)
		{
			if(x%i == 0)
				return 0;
		}
		return 1;
	}
}
//判断是否为可逆素数,是可逆素数返回1,不是可逆素数返回0
//要求输入为素数
int isReverPrime(int x)
{
	if((x/10) == 0) //如果是一位数
		return 1; //是可逆素数
	else
	{
		int shi,ge,reverse;
		shi = x/10;  //提取十位数
		ge = x - shi*10;  //提取各位数
		reverse = ge*10+shi;
		//判断逆数是否为素数
		if(isPrime(reverse))
			return 1;
		else
			return 0;
	}
}
//主函数
int main()
{
	//声明一个二维数组,第一行放值,第二行放素数判断情况(是素数赋为1,不是素数赋为0)
	int a[2][N+1],i; 
	for(i=0;i<N+1;i++)
		a[0][i] = i;
	for(i=2;i<N+1;i++)
	{
		//如果是素数
		if(isPrime(a[0][i]))
		{
			a[1][i] = 1; //对应的下一行位置置1
			if(a[1][i])
				if(isReverPrime(a[0][i])) //如果是可逆素数
					cout << a[0][i] << ' '; //输出可逆素数
		}
	}
	cout << endl;
	system("pause");
	return 0;
}

先写一个判断是否为素数的函数,再写一个判断该素数是否为可逆素数的函数(注意输入前提为素数)。

这个程序比较有特色的地方是声明了一个二维数组(两行,第一行放需要判断的数字,第二行放素数的判断结果:素数-1,非素数-0),第二行相当于常用的flag标志,内存占用会多一点,但是理解起来简单一些。

运行结果如下:

猜你喜欢

转载自blog.csdn.net/elma_tww/article/details/85015681