Skip to content

14272: 【原4272】惊奇数

题目

题目描述

author: 程序设计思想与方法助教组Wu/Li 原OJ链接:https://acm.sjtu.edu.cn/OnlineJudge-old/problem/4272

问题描述

如果一个数的质因子只有2、3、5、7,我们定义该数为惊奇数(Marvel Number)。

注意:1也被认为是一个惊奇数。例如:

1 = 1  // 1 is a Marvel Number.
6 = 2 * 3 // 6 is a Marvel Number.
60 = 2 * 2 * 3 * 5 // 60 is a Marvel Number.
420 = 2 * 2 * 3 * 5 * 7 // 420 is a Marvel Number.
2310 = 2 * 3 * 5 * 7 * 11  // 2310 is NOT a Marvel Number.
  • 编写程序,读入两个整数a和b,计算并输出闭区间[a,b]中的惊奇数

输入输出描述

输入

  • 输入为两个整数(在问题描述中记作a和b,程序中请自定变量名),a和b使用1个空格分隔。

输出

  • 输出闭区间[a,b]中的所有惊奇数
  • 数据之间用换行符分隔。
  • 如果输入错误,输出提示信息error
  • 如果没有找到惊奇数,输出提示信息no

数据范围说明

  • 本次考试中,惊奇数限定范围为5位以内正整数,即输入范围为[1, 99999],其他数据均输出error。 测试集输入数据均在int范围内。

程序运行示例

示例1

Sample Input 1

200 220

Sample Output 1

200
210
216

示例2

Sample Input 2

-6 7

Sample Output 2

error

示例3

Sample Input 3

13 13

Sample Output 3

no

示例4

Sample Input 4

1 20

Sample Output 4

1
2
3
4
5
6
7
8
9
10
12
14
15
16
18
20

注意

  • 不要显示多余的提示信息,避免输出判定错误
  • 注意判断输入信息是否符合要求。

victrid's solution

#include <iostream>

using namespace std;

bool isMarvel(int number) {
    while (number % 2 == 0)
        number /= 2;
    while (number % 3 == 0)
        number /= 3;
    while (number % 5 == 0)
        number /= 5;
    while (number % 7 == 0)
        number /= 7;
    return number == 1;
}

int main() {
    int Minimum, Maximum;
    cin >> Minimum >> Maximum;
    // error leads to quit
    if (Minimum < 1 || Minimum > 99999 ||
        Minimum > Maximum) {
        cout << "error";
        return 0;
    }
    // go through limits
    bool FOUND_FLAG = false;
    for (int i = Minimum; i <= Maximum; i++) {
        if (isMarvel(i)) {
            if (FOUND_FLAG)
                cout << endl;
            FOUND_FLAG = true;
            cout << i;
        }
    }
    if (!FOUND_FLAG)
        cout << "no";
    return 0;
}