B3907 [语言月赛 202312] NK

发布时间 2023-12-14 16:27:21作者: du463

[语言月赛 202312] NK

题目描述

给定两个正整数 \(N, K\),请你统计符合以下条件的正整数 \(x\) 的数量:

  • \(1 \leq x \leq N ^ N\)
  • \((x \bmod K)\)\(N\) 的倍数。
  • \(x\) 的个位是 \(N\)

\(x \bmod K\) 代表 \(x\) 除以 \(K\) 的余数,例如 \(7 \bmod 3 = 1\)

输入格式

输入一行两个整数 \(N, K\)

输出格式

输出一行一个整数,代表符合题干中所有条件的 \(x\) 的数量。

样例 #1

样例输入 #1

4 6

样例输出 #1

17

样例 #2

样例输入 #2

7 6

样例输出 #2

0

提示

数据规模与约定

  • 对于 \(30\%\) 的数据,\(1 \leq N, K \leq 6\)
  • 对于 \(100\%\) 的数据,\(1 \leq N \leq 9\)\(1 \leq K \leq 10 ^ 6\)

思路:

一开始仅仅只得了三十分,原因竟然是不能普通的模拟,事实上我们不用考虑1-pow(n,n)所有的数,只需要考虑,所有结尾是n的数字就可以了,也就是我们可以做一个i * 10+n这样就保证了数字最后一定是n

代码:

#include<bits/stdc++.h>
using namespace std;
void solve(){
    int n,k;
    cin>>n>>k;
    int x=1;
    for(int i=1;i<=n;i++){
        x*=n;
        
    }
    x/=10;

    // for(int i=1;i<=)
    int ans=0;
    for(int i=0;i<=x;i++){
        int y=(i*10+n);
        if((y%k)%n==0){
            ans++;
        }
    }
    cout<<ans<<endl;
    return ;
    
}
int main(){
    int t=1;
    while(t--){
        solve();
    }
    return 0;

}