打卡信奥刷题(1382)用C++实现信奥 B4070 [GESP202412 五级] 奇妙数字

B4070 [GESP202412 五级] 奇妙数字

题目描述

小杨认为一个数字 xxx 是奇妙数字当且仅当 x=pax=p^ax=pa,其中 ppp 为任意质数且 aaa 为正整数。例如,8=238=2^38=23,所以 888 是奇妙的,而 666 不是。

对于一个正整数 nnn,小杨想要构建一个包含 mmm 个奇妙数字的集合 {x1,x2,⋯ ,xm}\{x_1,x_2,\cdots,x_m\}{x1,x2,,xm},使其满足以下条件:

  • 集合中不包含相同的数字。
  • x1×x2×⋯×xmx_1\times x_2\times \cdots\times x_mx1×x2××xmnnn 的因子(即 x1,x2,⋯ ,xmx_1,x_2,\cdots,x_mx1,x2,,xmmmm 个数字的乘积是 nnn 的因子)。

小杨希望集合包含的奇妙数字尽可能多,请你帮他计算出满足条件的集合最多包含多少个奇妙数字。

输入格式

第一行包含一个正整数 nnn,含义如题面所示。

输出格式

输出一个正整数,代表满足条件的集合最多包含的奇妙数字个数。

输入输出样例 #1

输入 #1

128

输出 #1

3

说明/提示

样例解释

关于本样例,符合题意的一个包含 333 个奇妙数字的集合是 {2,4,8}\{2,4,8\}{2,4,8}。首先,因为 2=212=2^12=214=224=2^24=228=238=2^38=23,所以 2,4,82,4,82,4,8 均为奇妙数字。同时,2×4×8=642\times 4\times 8=642×4×8=64128128128 的的因子。

由于无法找到符合题意且同时包含 444 个奇妙数字的集合,因此本样例的答案为 333

数据范围

对于 100%100\%100% 的数据,保证 2≤n≤10122\le n\le 10^{12}2n1012

子任务编号得分占比nnn
11120%20\%20%≤10\le 1010
22220%20\%20%≤1 000\le 1\,0001000
33360%60\%60%≤1012\le 10^{12}1012

C++实现

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
typedef long long LL;
LL x;
int calc(int x){
    int res = 0, k = 1;
    while (x >= k)    {
        res ++;
        x -= k ++;
    }
    return res;
}

int main(){
    cin >> x;
    LL res = 0;
    for (int i = 2; i <= x / i; ++ i )
    {
        int cnt = 0;
        while (x % i == 0)
            x /= i, cnt ++;
        if (cnt)
            res += calc(cnt);
    }
    if (x > 1)
        res ++;
    cout << res << endl;
    return 0;
}

在这里插入图片描述

后续

接下来我会不断用C++来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现,记录日常的编程生活、比赛心得,感兴趣的请关注,我后续将继续分享相关内容

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值