信息学奥赛一本通(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】