Skip to content

13001: 【原3001】二哥的幸运

题目

题目描述

author: pigoneand 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/3001

Description

二哥是一个挺二的人,在二哥的世界观中,有些数字代表着幸运,如果在某一天二哥能够看到一个幸运数字,那么他将非常高兴。当然,二哥对于幸运的定义也是不同凡响,如果一个数字只包含4或者7两种字符,并且他是一个质数(素数),那么二哥认为他是一个幸运数字。二哥想请聪明的你帮忙回答,给定的一个数是否是幸运数字。

Input Format

第1行有1个整数N,表示要测试的数据

Output Format

输出一行字符串,YES或者NO。 表示是否是个幸运数字

Sample Input

47

Sample Output

YES

样例解释

质数的定义为只能被1和他本身整数的数。2是最小的质数。

数据范围

对于100%的数据: \( 1 \leq N \leq 1000000 \);

satgo1546's solution

#include <iostream>
using namespace std;

bool only47(int x) {
    while (x) {
        if (x % 10 != 4 && x % 10 != 7) return false;
        x /= 10;
    }
    return true;
}

bool prime(int x) {
    if (x < 3) return x == 2;
    if (~x & 1) return false;
    for (int i = 3; i * i <= x; i += 2) {
        if (x % i == 0) return false;
    }
    return true;
}

int main(int argc, char *argv[]) {
    cin >> argc;
    cout << (only47(argc) && prime(argc) ? "YES\n" : "NO\n");
    return 0;
}

yyong119's solution

#include <iostream>
#include <cmath>
using namespace std;
int n;
bool flag = true;
int main() {
    ios::sync_with_stdio(false);
    cin >> n;
    int tmp = n;
    while (tmp) {
        if (tmp % 10 != 7 && tmp % 10 != 4) {
            flag = false;
            break;
        }
        tmp /= 10;
    }
    if (flag)
        for (int i = 2; i <= sqrt(n); ++i)
            if (n % i == 0) {
                flag = false;
                break;
            }
    if (flag) cout << "YES" << endl;
    else cout << "NO" << endl;
    return 0;
}