Trailing Zeroes (II) LightOJ - 1090

TrailingZeroes求解
本文介绍了一种解决TrailingZeroes问题的方法,通过计算组合数C(n,r)与p^q乘积中2和5的因子数量来确定结果中0的数量。文中详细解释了求解过程,并给出了具体实现代码。

题目:Trailing Zeroes (II)  LightOJ - 1090 

题意:就是给你一个公式C(n, r)*p^q结果中有多少个0,但是题目中的顺序有点问题,我也是看别人的博客才看懂啥意思。

思路:本题的题意非常的简单,但是如何求取0的个数,一开始我看到C(n, r)就想到了Lucas定理,但是后来感觉不对,我就想到之前做过的题,也是类似的Trailing Zeroes (III) LightOJ - 1138 ,发现只需要求解2的个数和5的个数,然后取个数小的那一个。首先我们看C(n, r)中怎么求解5和2的个数,因为很容易利用x=[n/p]+[n/p^2]+[n/p^3]+…………;这个公式(算是公式吧)如果不明白请看上面的博客。那么p^q就比较好求了,只要求出p中有多少个2或者5,再乘以q,就是p^q中有多少个2或者5。

代码:

#include<bits/stdc++.h>
using namespace std;
#define LL long long
int ask(int x, int p)
{
    int ans = 0;
    while(x)
    {
        ans += x/p;
        x /= p;
    }
    return ans;
}
int Judge(int x, int p)
{
    int ans = 0;
    while(x % p == 0)
    {
        ans ++;
        x /= p;
    }
    return ans;
}
int main()
{
    int T, ca = 0;
    cin>>T;
    while(T--)
    {
        int n, r, p, q;
        cin>>n>>r>>p>>q;
        int total = ask(n, 2);
        int t = ask(n-r, 2);
        int k = ask(r, 2);
        total -= (t+k);
        int total1 = ask(n, 5);
        int t1 = ask(n-r, 5);
        int k1 = ask(r, 5);
        total1 -= (t1+k1);
        int a = Judge(p, 2);
        int b = Judge(p, 5);
        a *= q;
        b *= q;
        total += a;
        total1 += b;
        printf("Case %d: %d\n", ++ca, min(total, total1));
    }

    return 0;
}

 

### 过多空行 使用文本编辑器的查找替换功能,将连续的多个空行替换为单个空行。以 `vim` 为例,在命令模式下输入以下命令: ``` :%s/\n\{3,}/\r\r/g ``` 此命令将三个及以上连续的换行符替换为两个换行符,即保留一个空行。 ### 换行符错误 不同操作系统使用不同的换行符,Windows 使用 `\r\n`,Unix/Linux 使用 `\n`。可以使用工具将换行符统一。例如,使用 `dos2unix` 工具将 Windows 格式的换行符转换为 Unix/Linux 格式: ```bash dos2unix /public/home/hcq_zhangjiyi2/DRL-STNet/configs/config.yaml ``` 如果要将 Unix/Linux 格式转换为 Windows 格式,可以使用 `unix2dos` 工具。 ### 缺少文档起始标志 YAML 文件的文档起始标志是 `---`。可以手动在文件开头添加该标志。使用 `vim` 打开文件后,在第一行输入 `---` 并保存文件。 ### 尾随空格 可以使用文本编辑器的查找替换功能去除每行末尾的空格。在 `vim` 中,在命令模式下输入以下命令: ``` :%s/\s\+$// ``` 此命令将每行末尾的一个或多个空格替换为空。 ### 缩进错误 YAML 对缩进非常敏感,同一层次的元素必须有相同的缩进。可以使用 `yamllint` 工具检查缩进错误,然后手动调整。安装 `yamllint`: ```bash pip install yamllint ``` 检查文件: ```bash yamllint /public/home/hcq_zhangjiyi2/DRL-STNet/configs/config.yaml ``` 根据 `yamllint` 的输出调整缩进。 ### 语法错误 使用 `yamllint` 工具可以检查 YAML 文件的语法错误。根据工具的提示修改文件中的语法问题。 ### 行长过长 可以手动将过长的行拆分成多行。在 YAML 中,可以使用折叠块(`>`)或多行字符串(`|`)来处理长字符串。例如: ```yaml long_text: > This is a very long text that spans multiple lines. ``` ### 注释前空格不足 确保注释前有一个空格。可以使用文本编辑器的查找替换功能,查找没有空格的注释并添加空格。 ```python # 示例代码,读取 YAML 文件 import yaml with open('/public/home/hcq_zhangjiyi2/DRL-STNet/configs/config.yaml', 'r') as file: data = yaml.safe_load(file) print(data) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值