uva 10061——How many zero\'s and how many digits ?

题意:这道题开始是卡了很久的,题意是给定一个数n然后让你求B进制下n!有多少个零,和有多少位数,咋一看,是高精度,如果数论不是很熟系。

思路:开始是直接抛弃高精度的一来是存不下,二来没办法短时间计算出来,所以,单纯高精度是无法解题的,提题目就变成了如何使精度和运算降下来的问题了。通过观察,比如10,为什么末尾有0,因为该数含有2*5,所以要想求有多少个零,只需要求n!能分解成多少个进制的问题了,等等这问题有点眼熟,在数学1专题里就做过一个和这个一模一样的题目,因式分解求最小就完了。但是另一个问题随即而来,求完了末尾0的个数,那n的阶乘的位数该怎么求,这一点我就完全没想到,后来找了网上的题解,才明白是怎么一回事,原来可以用对数来保存n的阶乘,然后直接打表计算即可(用斯特林公式可能会因为误差而wa)!

code:

#include <iostream>
#include <cmath>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

typedef long long ll;
const int M=0x7fffffff;
const int N=10010;
bool ft[N];
int prime[N],t=0;
double w[1<<20];
double ep=1e-8;

void init() //打素数以及处理阶乘
{
memset(ft,true,sizeof(ft));
ft[0]=ft[1]=false;
for (int i=2;i<N;i++)
{
if (!ft[i]) continue;
prime[++t]=i;
for (int j=2*i;j<N;j+=i)
ft[j]=false;
}
w[0]=0;
for (int i=1;i<(1<<20);i++)
w[i]=w[i-1]+log(1.0*i);
}
int many0(int m, ll n) //因式分解
{
int i,j;
int ans=M,p=1;
while (m>1)
{
int ct=0;
while (m%prime[p]==0)
{
ct++;
m/=prime[p];
}
if (ct==0){p++; continue;}
if (prime[p]>n){ans=0; break;}
int nt=0;
for (i=prime[p];i<=n;i*=prime[p])
nt+=n/i;
ans=min(ans,nt/ct);
}
return ans;
}
int main()
{
init();
ll m;
int n;
while (cin>>m>>n)
printf("%d %d\n",many0(n,m),(int)(w[m]/log(1.0*n)+1+ep));
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/381989.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux文件与目录管理常用命令

改变文件属性与权限 chgrp [-R] dirname/filename 改变文件所属用户组 -R 递归更改chown [-R] 账号名称:组名 dirname/filename 改变文件所有者chmod 改变文件权限 urwx 文件所有者权限为rwxgrw 所属用户组权限为rw-or others权限为r–ax 所有权限加上x权限(a-x 略) 创建新…

uva 10673 ——Play with Floor and Ceil

题意&#xff1a;给定两个数n和m&#xff0c;对于n/m一个向上取整&#xff0c;一个向下取整&#xff0c;然后得到一个方程即P*floor(n/m&#xff09;q*ceil(n/m)n;求该公式中p和q的值的大小。思路&#xff1a;很明显&#xff0c;扩展的欧几里得方程&#xff0c;直接带入扩展欧几…

uva 756—— Biorhythms

题意&#xff1a;就是给定三个生理周期&#xff0c;然后从d天开始&#xff0c;问经过多少天后&#xff0c;三个周期会再度重合&#xff01;思路&#xff1a;这个题以前做过&#xff0c;当然现在看来&#xff0c;正解应该使用同余模方程和中国剩余定理&#xff0c;不过值得庆幸的…

linux兴趣小组2017面试题浅析

linux兴趣小组2017面试题 1. 分析下列程序的输出. int main(int argc, char *argv[]) {int t 4;printf("%lu\n", sizeof(t--));printf("%lu\n", sizeof("ab c\nt\012\xa1*2"));return 0; } 若运行printf(“%d\n”,t); 结果为4&#xff0c;因为…

uva 701——The Archeologists\' Dilemma

题意&#xff1a;一个考古学家发现一些疑似外星人的数字&#xff0c;然后硬扯到2的n次方上&#xff0c;给定一个数&#xff0c;使其是2的n次方的前缀&#xff0c;然后求n&#xff0c;还有个要求即该数作为前缀的长度要小于总长度的一半。思路&#xff1a;想了很久不得思路的一道…

linux下搜狗输入法无法输入中文解决方法

今天打开电脑&#xff0c;突然发现之前一直用的很好的搜狗输入法突然炸了&#xff0c;竟然没法输中文&#xff0c;在谷歌了几个解决方法后&#xff0c;终于找到了一个能用的方法。记录下来&#xff0c;已备后用。 解决方法: 关闭搜狗输入法 killall fcitx删除配置文件 ~/.co…

uva 550——Multiplying by Rotation

题意&#xff1a;在一个进制内 比如十进制下179487 * 4 717948和9进制下17 * 4 71 给定三个数&#xff0c;一个是进制&#xff0c;一个数是该组数的最后一个数字&#xff0c;另外一个则是该组数中的一个因数&#xff0c;问该组数中另一个因数是多少位数。思路&#xff1a;由最…

linux与windows编码转化

最近在写实验报告时&#xff0c;由于在机房只能用windows系统&#xff0c;在程序没写完而转战linux时却总是发生出现乱码问题&#xff0c;之前修改几次无果&#xff0c;只好改为英文。今天特地抽出时间来解决这一问题&#xff0c;解决方法如下&#xff1a; 使用iconv命令: ico…

uva 138——Street Numbers

题意&#xff1a;一个老师闲来无事就从他家门口向前走&#xff0c;然后累加门牌数&#xff0c;最后发现向前走和向后累加到的门牌数一样&#xff0c;然后让求该老师家的门牌数&#xff0c;枚举出前6个。思路&#xff1a;假设门牌数为1-n&#xff0c;该老师的门牌号为m&#xff…

再见“小明爬楼梯”问题

在c语言期末考试中&#xff0c;再次见到了“小明爬楼梯”问题&#xff0c;而第一次见到是在某次面试题中&#xff0c;由于当时还没有学到递归部分&#xff0c;因此就仅仅把代码看了一下&#xff0c;然而其中包含的思想却没有弄清楚&#xff0c;因此在考试时见到该题一头雾水&am…

uva 10539——Almost Prime Numbers

题意&#xff1a;给定一个区间范围&#xff0c;然后问在这个范围之内有多少个数是素数的整数倍&#xff0c;就是能够化成一个素数乘方的形式思路&#xff1a;首先要打一张sqrt&#xff08;N5)大小的素数表&#xff0c;然后对在在这个区间的数依次进行枚举做因数分解&#xff0c…

linux下隐藏输入密码

在做课设时&#xff0c;因为在windows上写了一个输入密码时屏幕显示为***的函数&#xff0c;但是在移植到linux系统上时却有问题&#xff0c;提示有错误。 上网搜索&#xff0c;有人说getch()函数的头文件是curses.h,还有人说是conio.h, 但是在ubuntu系统中都不能使用&#xf…

uva 11105——Semi-prime H-numbers

题意&#xff1a;定义了一种H素数&#xff0c;改素数的定义是能够被4整除余数为1&#xff0c;然后给定一个n值&#xff0c;问1到n中有多少个只被分解成两个H素数的数&#xff0c;题目很绕&#xff0c;H素数和他要球的东西一直搞不明白&#xff01;思路&#xff1a;最好的办法是…

文件操作总结(一)

该部分将作为日常学习的总结&#xff0c;内容将会比较杂乱&#xff0c;只有整体上的主题——文件操作。 主要目录的存储内容 /bin 全称binary&#xff0c; 存放普通用户可执行的命令/boot 存放Linux内核及开机启动的相关文件/etc 存放系统的配置文件/usr 存放系统应用程序及相…

uva 294 ——Divisors

题意&#xff1a;给定一个区间[l,r],然后问在该区间内谁的因子最多&#xff01;思路&#xff1a;先大致分析一下&#xff0c;比如对于一个数12&#xff0c;那么可以拆分成2*2*3&#xff0c;就是对一个数分解质因数&#xff0c;然后你会发现在组成因子的时候&#xff0c;每个质因…

邮箱验证 ——ACM

邮箱验证POJ 注册的时候需要用户输入邮箱&#xff0c;验证邮箱的规则包括&#xff1a; 1)有且仅有一个符号 2)和.不能出现在字符串的首和尾 3)之后至少要有一个.&#xff0c;并且不能和.直接相连 满足以上3条的字符串为合法邮箱&#xff0c;否则不合法&#xff0c; 编写程…

uva 10140——Prime Distance

题意&#xff1a;题目出的很简单&#xff0c;给定一个数据范围&#xff08;好吧&#xff0c;又是给定一个范围&#xff09;&#xff0c;然后问你在这个给定的范围内&#xff0c;哪两个相邻素数挨的最近&#xff0c;哪两个最远。思路&#xff1a;这破题数据量很大&#xff0c;如…

Lowest Common Multiple Plus ——ACM

1. Lowest Common Multiple Plus求n个数的最小公倍数。Input 输入包含多个测试实例&#xff0c;每个测试实例的开始是一个正整数n&#xff0c;然后是n个正整数。为每组测试数据输出它们的最小公倍数&#xff0c;每个测试实例的输出占一行。你可以假设最后的输出是一个32位的整…

文件操作(二) 其他总结

一、 文件操作 1、 获取文件属性 #include<sys/types.h> #include<sys/stat.h> #include<unistd.h>int stat(const char *filename, struct stat *buf); int fstat(int fd, struct stat *buf); int lstat(const char *filename, struct stat *buf);部分常用…

【转】博弈知识汇总

有一种很有意思的游戏&#xff0c;就是有物体若干堆&#xff0c;可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干&#xff0c;规定最后取光物体者取胜。这是我国民间很古老的一个游戏&#xff0c;别看这游戏极其简单&#xff0c;却蕴含着深刻的数学原理。下面我们…