首页 > 其他分享 >[UVA12683] Odd and Even Zeroes

[UVA12683] Odd and Even Zeroes

时间:2023-10-26 19:55:26浏览次数:41  
标签:UVA12683 Even 奇数 int ll 个数 偶数 Zeroes 末尾

Description

给出 \(n\),求出 \(0!, 1!, 2! \ldots, n!\) 中有几个末尾有偶数个 \(0\)。

\(1\le n\le 10^{18}\)。

Solution

根据基本结论,一个数末尾 \(0\) 的个数等于该数有几个因数 \(5\)。而一个数的阶乘末尾有几个 \(0\),等于小于等于该数的所有数的因数 \(5\) 的个数的和。对此,我们设 \(d_i\) 表示有多少个数满足 \(5^i\) 是其因子,但 \(5^{i+1}\) 不是。那么考虑 \(n\) 的五进制,发现 \(d_i\) 即为对应位上的值。而 \(n!\) 末尾的 \(0\) 的个数,可以用 \(\sum\limits_{i=0}^{len} d_i\times i\) 来表示。

而我们要使其为偶数,只需要 \(i\) 是奇数的 \(d_i\) 之和为偶数即可。因此考虑数位 \(dp\),设 \(f_{i,0/1,0/1}\) 表示当前到了第 \(i\) 位,之前是否取最大值,奇数位上的和的情况(\(0\) 表示偶数,\(1\) 表示奇数)。转移就枚举当前这一位的数是什么,然后更新即可。

Code

#include<cstdio>
#include<cstring>
#define N 30
#define ll long long
using namespace std;
int len,a[N];
ll n,f[N][2][5*N];
ll dp(int x,int tp,int s)
{
    if (x<0) return s==0;
    if (f[x][tp][s]) return f[x][tp][s];
    int mx=tp?a[x]:4;ll res=0;
    for (int i=0;i<=mx;++i)
    {
        if (x&1) res+=dp(x-1,tp&&(i==mx),(s+i)%2);
        else res+=dp(x-1,tp&&(i==mx),s);
    }
    return f[x][tp][s]=res;
}
int main()
{
    while (true)
    {
        scanf("%lld",&n);
        if (n==-1) break;
        memset(f,0,sizeof(f));
        len=0;
        ll x=n;
        while (x)
        {
            a[len++]=x%5;
            x/=5;
        }
        len--;
        printf("%lld\n",dp(len,1,0));
    }
    return 0;
}

标签:UVA12683,Even,奇数,int,ll,个数,偶数,Zeroes,末尾
From: https://www.cnblogs.com/Livingston/p/17790233.html

相关文章

  • 利用paraview中的EvenlySpacedStreamlines2D绘制流线图
    paraview中有一个filter叫EvenlySpacedStreamlines2D,可以对xy平面或者平行于xy平面的clip绘制均匀分布的流线,但是仅限于xy平面或者平行于xy平面的clip。下面是效果对比,右边的图是经过EvenlySpacedStreamlines2D处理自动生成的,可以发现流线分布非常均匀。   在一些三维案例......
  • 通过反射获取事件Event并实现方法
    C#EventInfo.AddEventHandler方法代码示例EventInfo.AddEventHandler(Object,Delegate)Method(System.Reflection)|MicrosoftLearn//引入命名空间usingSystem;usingSystem.Reflection;usingSystem.Reflection.Emit;publicclassExample{privatestatico......
  • C# event随笔
    通过事件使用委托        事件在类中声明且生成,且通过使用同一个类或其他类中的委托与事件处理程序关联。包含事件的类用于发布事件。这被称为 发布器(publisher) 类。其他接受该事件的类被称为 订阅器(subscriber) 类。事件使用 发布-订阅(publisher-subscriber) 模型。......
  • EventLoop(事件循环)
    EventLoop(事件循环)一、前言JS任务分为同步任务(非耗时任务)和异步任务(耗时任务),异步任务又分为宏任务和微任务。eventloop:JS主线程不断的循环往复的从任务队列中读取任务,执⾏任务,这种运⾏机制称为事件循环(eventloop)二、同步和异步​ JS是单线程执行的语言,在同一个时间......
  • 2023-10-24 Too many re-renders. React limits the number of renders to prevent an
    React报错:Toomanyre-renders.Reactlimitsthenumberofrenderstopreventaninfiniteloop. 重新渲染过多。React限制渲染次数,以防止出现无限循环。解决方案:查看你最近写的代码,比如我写了一个函数组件,我在函数组件里面写了直接执行的任务,这将导致状态变化,react会重新渲......
  • Django+celery+eventlet+flower+redis异步任务创建及查询实现
    1.环境版本:Django3.2.12celery5.3.4eventlet0.33.3flower2.0.1redis3.5.3项目名称:new_project2.celery配置(settings.py)#celery#django-celery配置的部分#Broker配置,使用Redis作......
  • How to fix EventSource onmessage not working in JavaScript All in One
    HowtofixEventSourceonmessagenotworkinginJavaScriptAllinOneSSE:Server-SentEvents/服务端推送error❌window.addEventListener(`load`,(e)=>{console.log(`pageloaded✅`);if(!!window.EventSource){constimg=document.querySelecto......
  • #结论#CF1776G Another Wine Tasting Event
    题目给定一个长度为\(2n-1\)的字符串,问一组使得\(n\)个长度不小于\(n\)的区间中字母W的个数相等的字母W的个数分析首先结论就是\(\max_{i=1}^n\{cW[i\dotsi+n-1]\}\)一定是合法解以这组解为基准,左右端点如果向外扩展那么个数一定会更多或者不变,而此时由于当前字母......
  • addEventListener()元素事件监听的用法及事件汇总
     addEventListener() 方法用于给元素添加监听事件,同一个元素可以重复添加,并且不会覆盖之前相同事件,用removeEventListener()方法来移除事件。使用方法:1vararberNameFilter=document.getElementById("arber_name_filter");2arberNameFilter.addEventListener("focus",......
  • 浏览器事件循环 event loop(消息循环)
     打开浏览器 即 开启一个浏览器进程(主要负责浏览器UI,用户交互,子进程拉起关闭等)并由浏览器进程拉起网络进程(多Tab共享)采用多线程模式,GPU 进程(多Tab共享)等当每开启一个tab 页,浏览器进程会负责为该Tab 拉起一个渲染进程,每一个渲染进程都会拉起一个渲染主线程(单线程......