1114、全素日
题目描述
-
以上图片来自新浪微博,展示了一个非常酷的“全素日”:2019年5月23日。即不仅
20190523
本身是个素数,它的任何以末尾数字3
结尾的子串都是素数。
-
本题就请你写个程序判断一个给定日期是否是“全素日”。
输入输出格式
输入格式:
-
输入按照
yyyymmdd
的格式给出一个日期。题目保证日期在0001年1月1日到9999年12月31日之间。
输出格式:
-
从原始日期开始,按照子串长度递减的顺序,每行首先输出一个子串和一个空格,然后输出
Yes
,如果该子串对应的数字是一个素数,否则输出No
。如果这个日期是一个全素日,则在最后一行输出All Prime!
。
输入输出样式
输入样例 1: 20190523 输出样例 1: 20190523 Yes 0190523 Yes 190523 Yes 90523 Yes 0523 Yes 523 Yes 23 Yes 3 Yes All Prime!
输入样例 2: 20191231 输出样例 2: 20191231 Yes 0191231 Yes 191231 Yes 91231 No 1231 Yes 231 No 31 Yes 1 No
代码示例
#include <iostream>
#include <string>
#include <cmath>
using namespace std;
bool IsPrime(int number) {
//1不是素数,😓(我怎么记得小学学过1、3、5、7、11、13、17……都是素数呀,是我记错了吗?)
if (number < 2) return false;
for (int i = 2; i <= sqrt(number); i++)
if (number%i == 0) return false;
return true;
}
int main() {
string number;
int flag = 1;
cin >> number;
int num = number.length();
for (int i = num; i > 0; i--) {
int m = pow(10, i);
if (IsPrime(stoi(number.substr(num - i, i)))) cout << number.substr(num - i, i) << " Yes" << endl;
else {
cout << number.substr(num - i, i) << " No" << endl;
flag = 0;
}
}
if (flag == 1) cout << "All Prime!" << endl;
return 0;
}