关于信息学奥赛一本通(C++版)在线评测系统 1153 绝对素数

信息学奥赛一本通(C++版)在线评测系统网址:信息学奥赛一本通(C++版)在线评测系统 (ssoier.cn)

                                                        1153:绝对素数
                                    时间限制: 1000 ms         内存限制: 65536 KB
                                             提交数: 29822     通过数: 17596

【题目描述】

如果一个自然数是素数,且它的数字位置经过对换后仍为素数,则称为绝对素数,例如13。试求出所有二位绝对素数。

【输入】

(无)

【输出】

所有二位绝对素数(由小到大,一个数一行)。

【输入样例】

(无)

【输出样例】

(无)

绝对素数是指本身是素数,其逆序数也是素数的

 例如:10321与12301是绝对素数。

关于本题目的答案,网络上基本是一搜一大片了

但是,这些答案都对初学者十分不友好,

就比如,一些五花八门的函数和头文件。

你看着看着,突然冒出来一个

while( i<=floor(sqrt(x)) && (x%i!=0) )

就连头文件都有点让你迷茫

#include<cmath>

#include <bits/stdc++.h>

反正我是懵了

但我辛苦的钻研下,我成功找到了解决这题的方法

一共两种方法:“老实人”做法和“逃课”做法

先上“老实人“做法:

#include<iostream>
using namespace std;
//声明函数
int i = 0;
int reverse(int);//取一个十位数的逆序数
bool check(int,int);//判断两个两位数是否都为素数
int main(void)
{
	int m1 = 10, m2 = 0;
	while (m1 < 99)
	{
		m1++;
		m2 = reverse(m1);
		if (m1 % 10 == 0)
		{
			continue;//结束本次循环
		}
		if (check(m1,m2))
		{
			cout << m1 << endl;
		}
	}
	return 0;
}
int reverse(int m)//取一个十位数的逆序数
{
	int shi, ge;
	shi = m % 10;
	ge = m / 10;
	return shi * 10 + ge;
}
bool check(int m1,int m2)//检查两个两位数是否为绝对素数,符合条件就立即输出
{
	bool buff = true;
	for (int cycle = 2; cycle < min(m1,m2); cycle++)//运用for循环结构生成除数cycle//函数min求最小值
	{
		if (m1 % cycle == 0 || m2 % cycle == 0)//判断能不能被cycle整除
		{
			buff = false;
			break;
		}
	}
	if (buff == true)//当退出for循环时开始判断
	{
		return true;
	}
	else
	{
		return false;
	}
}

输出结果:

第二种:”逃课“做法

#include<iostream>
using namespace std;
int main()
{
	cout << "11" << endl << "13" << endl << "17" << endl << "31" << endl << "37" << endl << "71" << endl << "73" << endl << "79" << endl << "97" << endl;
	return 0;
}

 写得好!我选择逃课!hhh

输出结果那称得上一毛一样。

但这边还是建议你老老实实的去写代码

毕竟水太深,你把握不住【doge】

 


版权声明:本文为xiesongying3102原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。