题解:CF2043B Digits

· · 题解

1 . 是否为 1 的倍数,这很简单,所有大于零的自然数都是 1 的倍数。

2 . 是否为 3 的倍数,由于这道题存在阶乘,所以我们不可以算出值来然后除以,我们可以用 n!d 判断。只要 n!d 有因子 3 ,那么就是 3 的倍数。

3 . 是否为 5 的倍数,只要 d 等于 5 ,那就是 5 的倍数。

4 . 是否为 7 的倍数,我们知道 10017 的倍数,所以通过计算器,我们得出只要是 n! 大于 3 ,或者 d 等于 7 ,那就是 7 的倍数。

5 . 是否为 9 的倍数,跟 3 差不多,但是 9 是两个 3 相乘,所以 n 要大于等于 6 ,或者 d 等于 9 ,或者 n 大于等于 3 并且 d 能被 3 整除,那就是 9 的倍数。

Code

#include <iostream>
using namespace std;
int main(){
    int t;
    cin>>t;
    for (int i=0;i<t;i++){
        int n,d;
        cin>>n>>d;
        cout<<1<<" ";
        if (n>=3 || d%3==0){
            cout<<3<<" ";
        }
        if (d==5){
            cout<<5<<" ";
        }
        if (n>=3 || d==7){
            cout<<7<<" ";
        }
        if (n>=6 || d==9 || (n>=3 && d%3==0)){
            cout<<9<<" ";
        }
        cout<<endl;
    }
    return 0;
}