codeforces 1114C
题目连接 : https://codeforces.com/contest/1114/problem/C
题目大意:给一个整数n(1e18>=n>=0),和一个整数k(1e12>=k>=2),问n!在k进制情况下末尾有多少个0.
题目很好理解,思路也很有意思,首先n!在十进制下有多少个0,很好想,10分解质因数有2,5,无论在什么情况下n!中分解出5的个数比2多,
分解是这个意思,5能找出1个5,10能找出一个5,25能找出2个5(因为是5*5,可以被5除两次)。以此类推,找这个东西是log级的。
代码如下:
sum=;//分解出5的个数
d=;//因为要分解5所以是5
while(d<=n){
sum+=n/d;
d*=;
}
进一步推广,要分解k进制,首先k分解质因数,在这里有一个问题,我们只是单单的找质因数中最大的就可以么,这个不一定,我们不知道最大的质因数要
多少个能组成k,虽然说质因数中最大的一定是数量最小的之一,但组成k需要的个数可能会让其他数不够用,比如48,有4个2,和1个3,在4!情况下,有3个2和1个3
这时反而2不够用,那么我们就要记录所有的质因数和需要的个数,然后每个都去找,看看那个最小的就是末尾0 的个数
AC代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
#include<iostream>
#include<math.h>
#include<vector>
#include<queue>
#include<map>
using namespace std;
typedef long long ll;
//map<int,int> mp;
#define INT_MAX 1e18;
typedef struct W_w{
ll shu;
ll ge;
}miao;
miao x[];
int main()
{
ll m,n;
scanf("%I64d %I64d",&m,&n);
int d=sqrt(n);
int ge=;
memset(x,,sizeof(x));
for(ll i=;i<=d;i++){
int flag=;
while(n%i==){
flag=;
x[ge].shu=i;
x[ge].ge++;
n/=i;
}
if(flag==) ge++;
}
if(n!=){
x[ge].shu=n;
x[ge].ge=;
ge++;
}
ll minn=INT_MAX;
//printf("%d\n",ge);
for(int i=;i<ge;i++){
ll dd=x[i].shu;
int ha=;
while(dd){
ha++;
dd/=;
}
dd=x[i].shu;
ll sum=;
while(dd<=m){
sum+=m/dd;
int haha=;
ll ddd=dd;
while(ddd){
ddd/=;
haha++;
}
if(haha+ha>) break;
dd*=x[i].shu;
}
minn=min(minn,sum/x[i].ge);
}
printf("%I64d",minn);
return ;
}
codeforces 1114C的更多相关文章
- Codeforces - 1114C - Trailing Loves (or L'oeufs?) - 简单数论
https://codeforces.com/contest/1114/problem/C 很有趣的一道数论,很明显是要求能组成多少个基数. 可以分解质因数,然后统计各个质因数的个数. 比如8以内,有 ...
- Trailing Loves (or L'oeufs?) CodeForces - 1114C (数论)
大意: 求n!在b进制下末尾0的个数 等价于求n!中有多少因子b, 素数分解一下, 再对求出所有素数的最小因子数就好了 ll n, b; vector<pli> A, res; void ...
- 【Codeforces 1114C】Trailing Loves (or L'oeufs?)
[链接] 我是链接,点我呀:) [题意] 问你n!的b进制下末尾的0的个数 [题解] 证明:https://blog.csdn.net/qq_40679299/article/details/8116 ...
- Codeforces 1114C(数论)
题面 传送门 分析 我们先考虑n!在10进制下有多少个0 由于10=2*5, 我们考虑n!的分解式中5的指数,答案显然等于\(\frac{n}{5}+\frac{n}{5^2}+\frac{n}{5^ ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- CodeForces - 662A Gambling Nim
http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...
随机推荐
- 清北刷题冲刺 10-28 a.m
立方数 (cubic) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK定义了一个数叫“立方数”,若一个数可以被写作是一个正整数的3次方,则这个数就是立方 ...
- 2017-10-2 清北刷题冲刺班a.m
一道图论神题 (god) Time Limit:1000ms Memory Limit:128MB 题目描述 LYK有一张无向图G={V,E},这张无向图有n个点m条边组成.并且这是一张带权图,只 ...
- 暴风魔镜SDK:MojingSDK For Unity V1.3.5112 (R).zip
去年买了个暴风魔镜4,如今一直放在家里吃灰,这些天对Unity3D开发VR兴趣正浓,刚好公司项目不忙,花了几天玩玩暴风魔镜SDK,因为网上的资料不算多,暴风提供的文档也不太适合像我这样的Unity小白 ...
- [USACO1.4]等差数列 Arithmetic Progressions
题目描述 一个等差数列是一个能表示成a, a+b, a+2b,..., a+nb (n=0,1,2,3,...)的数列. 在这个问题中a是一个非负的整数,b是正整数.写一个程序来找出在双平方数集合(双 ...
- ORM(一)
ORM常识: 1.一对多,多的一方设置外键字段,有外键字段的表叫做子表.没有外键字段的表叫做主表. 2.主表放到子表的下面,否则子表找不到主表,写数据要先往主表中写. 数据库:(1)不创建主键,会自动 ...
- DropDownList 不能绑定多个值错误!
ListItem item = new ListItem("--请选择--",""); ddlstPurchaser.Items.Insert(0, item) ...
- .net中Response.End() 和Response.Redirect("http://dotnet.aspx.cc");
问:什么情况下需要Response.End()语句,加这句有什么好处 答: 首先你要理解Response.End()的意思,它的意思是终止执行下面的语句!但有时不加和加上都一样,但还要加上好,为什么呢 ...
- Unity C# 运用 GetSaveFileName() 导出Excel文件
本文原创,转载请注明出处:http://www.cnblogs.com/AdvancePikachu/p/6944870.html 唉哟,这次厉害咯,网上搜罗了好久,终于被我找到汉化的保存对话框了,根 ...
- C#对INI文件读写
C#本身没有对INI格式文件的操作类,可以自定义一个IniFile类进行INI文件读写. using System; using System.Collections.Generic; using S ...
- Linux常用操作2
第1章 find命令扩展 转自:https://www.cnblogs.com/clsn/p/7520333.html 1.1 方法一 |xargs 通过|xargs将前面命令的执行结果传给后面. [ ...