#CSPR09D. [CSP复赛模拟第09套-D题] 战争游戏

    ID: 9986 传统题 1000ms 512MiB 尝试: 0 已通过: 0 上传者: 标签>编程题c++CSPCSP复赛CSP模拟练习CSP复赛模拟第09套第09套-D题

[CSP复赛模拟第09套-D题] 战争游戏

战争游戏

题目描述

小珅和小泽在玩一款战争游戏。但小珅没有着急立马去进攻,而是姑且先让小泽轻松一下,小珅准备先采取一种奇怪阵法来形成战斗力。

这套阵法有一个战斗力系数 kk,最终战斗力和士兵数量息息相关:

如果士兵数量为 11 则战斗力就是 11

假设有 nn (n>1n > 1) 名士兵

先需要把士兵平分成 xx 个小组。这里 xx 必须大于 11、必须是 nn 的因子(不然怎么叫平分)、且必须是所有满足前面条件的数中最小的一个。

因为是平分,此时每个小组的人数都是 nx\frac{n}{x}。最终战斗力就是所有小组用同样战斗力系数算出的战斗力之和再乘以 kk 再对 109+710^9 + 7 取模后的结果。

由此,在不考虑整型溢出的情况下,可以用下面这个递归程序,算出 nn 名士兵,战斗力系数为 kk 时的最终战斗力(显然在战斗力超过 int 范围时计算会错误)。

#include <bits/stdc++.h>
using namespace std;
const int MOD = 1'000'000'000 + 7;
int f(int n, int k)
{
    if (n == 1)
        return 1;
    for (int x = 2; x <= n; x++) // x>1
        if (n % x == 0)       // x 是 n 的因子
        {

## 输入格式

两个整数,$m, k$。

## 输出格式

一个整数,即答案。

## 输入输出样例

### 输入 #1

1 33


### 输出 #1

1


### 输入 #2

5 2


### 输出 #2

25


## 说明/提示

对于 $100\%$ 的数据,$1 \le m \le 2 \times 10^7$,$1 \le k \le 100$。

子任务 $1$($10$ 分):保证 $k = 1$。

子任务 $2$($20$ 分):保证 $m \le 10^4$。

子任务 $3$($30$ 分):保证 $m \le 10^6$。

子任务 $4$($40$ 分):没有特殊限制。