UVa 10061 How many zero's and how many digits?

方法: factorial mod, logarithm

 

求trailing zeros,其实就是factorial mod 的应用,

求长度,利用log 函数。需要注意的是,答案为int(log(n!)/log(b)) + 1, 比如 a = 2, b = 2, 长度为2.

code:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <bitset>
#include <cstdlib>
#include <cmath>
#include <set>
#include <list>
#include <deque>
#include <map>
#include <queue>
#include <fstream>
#include <cassert>
#include <unordered_map>
#include <cmath>
#include <sstream>
#include <time.h>
#include <complex>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define FOR(a,b,c) for (int (a)=(b);(a)<(c);++(a))
#define FORN(a,b,c) for (int (a)=(b);(a)<=(c);++(a))
#define DFOR(a,b,c) for (int (a)=(b);(a)>=(c);--(a))
#define FORSQ(a,b,c) for (int (a)=(b);(a)*(a)<=(c);++(a))
#define FORC(a,b,c) for (char (a)=(b);(a)<=(c);++(a))
#define FOREACH(a,b) for (auto &(a) : (b))
#define rep(i,n) FOR(i,0,n)
#define repn(i,n) FORN(i,1,n)
#define drep(i,n) DFOR(i,n-1,0)
#define drepn(i,n) DFOR(i,n,1)
#define MAX(a,b) a = Max(a,b)
#define MIN(a,b) a = Min(a,b)
#define SQR(x) ((LL)(x) * (x))
#define Reset(a,b) memset(a,b,sizeof(a))
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define all(v) v.begin(),v.end()
#define ALLA(arr,sz) arr,arr+sz
#define SIZE(v) (int)v.size()
#define SORT(v) sort(all(v))
#define REVERSE(v) reverse(ALL(v))
#define SORTA(arr,sz) sort(ALLA(arr,sz))
#define REVERSEA(arr,sz) reverse(ALLA(arr,sz))
#define PERMUTE next_permutation
#define TC(t) while(t--)
#define forever for(;;)
#define PINF 1000000000000
#define newline '\n'#define test if(1)if(0)cerr
using namespace std;using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> ii;
typedef pair<double,double> dd;
typedef pair<char,char> cc;
typedef vector<ii> vii;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> l4;
const double pi = acos(-1.0);int a, b;
bitset<2000001> vis(0);
ll primes[2000001];
int pcnt = 0;// said to be O(n) prime generating
void init()
{for (ll i = 2; i <= 2e6; ++i){if (!vis[i]) primes[pcnt++] = i;for (int j = 0; j < pcnt && i * primes[j] <= 2e6; ++j){vis[j*primes[j]] = true;if (i % primes[j] == 0) break;}}
}int main()
{init();while (cin >> a >> b){int ans = 1e9;int B = b;for (int i = 0; i < pcnt && b >= primes[i]; ++i){if (b % primes[i]) continue;int bcnt = 0;while (b % primes[i] == 0){b /= primes[i];bcnt += 1;}int fcnt = 0;int cur = a;while (cur){cur /= primes[i];fcnt += cur;}ans = min(ans, fcnt/bcnt);}double len = 0;for (int i = 2; i <= a; ++i){len += log(1.0*i);}cout << ans << " " << max((int)(len/log(B)+1),1) << newline;}
}

  

(我的笨办法)求trailing zero's 的长度,用一个数组记录下factorial里各个prime的power,然后用另一个数组记录下b里各个prime的power,然后求解。

code:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <bitset>
#include <cstdlib>
#include <cmath>
#include <set>
#include <list>
#include <deque>
#include <map>
#include <queue>
#include <fstream>
#include <cassert>
#include <unordered_map>
#include <cmath>
#include <sstream>
#include <time.h>
#include <complex>
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define FOR(a,b,c) for (int (a)=(b);(a)<(c);++(a))
#define FORN(a,b,c) for (int (a)=(b);(a)<=(c);++(a))
#define DFOR(a,b,c) for (int (a)=(b);(a)>=(c);--(a))
#define FORSQ(a,b,c) for (int (a)=(b);(a)*(a)<=(c);++(a))
#define FORC(a,b,c) for (char (a)=(b);(a)<=(c);++(a))
#define FOREACH(a,b) for (auto &(a) : (b))
#define rep(i,n) FOR(i,0,n)
#define repn(i,n) FORN(i,1,n)
#define drep(i,n) DFOR(i,n-1,0)
#define drepn(i,n) DFOR(i,n,1)
#define MAX(a,b) a = Max(a,b)
#define MIN(a,b) a = Min(a,b)
#define SQR(x) ((LL)(x) * (x))
#define Reset(a,b) memset(a,b,sizeof(a))
#define fi first
#define se second
#define mp make_pair
#define pb push_back
#define all(v) v.begin(),v.end()
#define ALLA(arr,sz) arr,arr+sz
#define SIZE(v) (int)v.size()
#define SORT(v) sort(all(v))
#define REVERSE(v) reverse(ALL(v))
#define SORTA(arr,sz) sort(ALLA(arr,sz))
#define REVERSEA(arr,sz) reverse(ALLA(arr,sz))
#define PERMUTE next_permutation
#define TC(t) while(t--)
#define forever for(;;)
#define PINF 1000000000000
#define newline '\n'#define test if(1)if(0)cerr
using namespace std;using namespace std;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef pair<int,int> ii;
typedef pair<double,double> dd;
typedef pair<char,char> cc;
typedef vector<ii> vii;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ll, ll> l4;
const double pi = acos(-1.0);int a, b;
int d[2000001] = {0};
int cnt[2000001];
int fcnt[2000001];
void init()
{d[1] = 1;for (ll i = 2; i <= 2e6; ++i){if (!d[i]){d[i] = (int)i;for (ll j = i*i; j <= 2e6; j += i)d[j] = (int) i;}}
}int main()
{init();while (cin >> a >> b){Reset(cnt, 0);int ans = 0;double len = 0;for (int i = 2; i <= a; ++i){len += log(1.0*i);int cur = i;while (cur != 1){cnt[d[cur]] += 1;cur /= d[cur];}}Reset(fcnt, 0);int cur = b;while (cur != 1){fcnt[d[cur]] += 1;cur /= d[cur];}ans = 1e9;for (int i = 2; i <= b; ++i)if (fcnt[i]){ans = min(ans, cnt[i]/fcnt[i]);//cerr << i << " " << cnt[i] << " " << fcnt[i] << newline;}cout << ans << " " << max((int)(len/log(b)+1),1) << newline;}
}

  

转载于:https://www.cnblogs.com/skyette/p/6357348.html

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

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

相关文章

Linux sudo找不到命令:修改sudo的PATH路径

为什么80%的码农都做不了架构师&#xff1f;>>> sudo有时候会出现找不到命令&#xff0c;而明明PATH路径下包含该命令&#xff0c;让人疑惑。其实出现这种情况的原因&#xff0c;主要是因为当 sudo以管理权限执行命令的时候&#xff0c;linux将PATH环境变量进行了重…

Javscript 实现字符数串比对排序(包含数字及中文数字)

主要代码&#xff1a; /** *description: 比较两个字符串大小 *author: JackieZheng *date: 2020-12-03 19:59:39 */ function compare(a, b) {if (a b) {return 0;} else {let lsta a.toString().replace(/[一二三四五六七八九十百千万亿]/g, ChineseToNumber).split(/(\d…

【QGIS入门实战精品教程】4.2:QGIS矢量数据采集(地图数字化)案例教程

本文基于上一个实验栅格数据地理配准,讲述在QGIS中创建shp格式矢量数据(点、线、面)并进行矢量数据的采集与编辑。 文章目录 一、实验数据及任务二、创建Shapefile图层三、数字化超详细步骤一、实验数据及任务 1. 实验数据:为了保证实验的连贯性,本次实验采用的数据为上一…

快速判断站点是否存活的 3 种编程实现

前言如何知道外部站点是否正在运行&#xff1f;如果使用浏览器&#xff0c;直接访问对应站点即可。那么&#xff0c;使用 C# 以编程方式&#xff0c;如何实现呢&#xff1f;GET 请求首先想到的&#xff0c;就是使用 HttpClient 向该站点发送 HTTP 请求&#xff0c;并检查返回状…

jQuery.ajax实现根据不同的Content-Type做出不同的响应

使用H5ASP.NET General Handler开发项目&#xff0c;使用ajax进行前后端的通讯。有一个场景需求是根据服务器返回的不同数据类型&#xff0c;前端进行不同的响应&#xff0c;这里记录下如何使用$.ajax实现该需求。 $.ajax({‘url‘: ‘GetWatermarkInfo.ashx‘,‘type‘:‘post…

论文的写作要求、流程与写作技巧

论文的写作要求、流程与写作技巧 广义来说&#xff0c;凡属论述科学技术内容的作品&#xff0c;都称作科学著述&#xff0c;如原始论著&#xff08;论文&#xff09;、简报、综合报告、进展报告、文献综述、述评、专著、汇编、教科书和科普读物等。但其中只有原始论著及其简报是…

【数据结构与算法】拓扑排序问题C语言实现

拓扑排序是有向无环图的一种应用,在实际生活中用的很多。 比如GIS专业的课程设计,许多课程需要前置课程要求,也就是说没上过A课程、则不可能直接去学B课程,画个图表就是: 同理,我们教材中的范例:穿衣服的过程也是一个拓扑排序问题,如下表: 有关这个拓扑排序的模型构造…

[转]2020年排名前20的基于SpringBoot搭建的开源项目,帮你快速进行项目搭建!

△Hollis, 一个对Coding有着独特追求的人△ 这是Hollis的第 287 篇原创分享 作者 l Hollis 来源 l Hollis&#xff08;ID&#xff1a;hollischuang&#xff09; SpringBoot一直是开发者比较青睐的一款轻量级框架&#xff0c;他不仅继承了Spring框架原有的优秀特性&#xff0c;而…

操作系统基础知识

操作系统的主要特性: 并发,共享,异步,虚拟性 分类 批处理系统 用户将一批作业提交给操作系统后就不再干预&#xff0c;由操作系统控制它们自动运行 批处理操作系统的特点是&#xff1a;多道和成批处理。分时实时可以通过命令接口和程序接口方式把它的服务和功能提供给用户 程序…

C# 搭建一个基于.NET5的WPF入门项目

概述.NET5 发布已经有一阵子了&#xff0c;今天抽空体验一哈&#xff0c;搭建一个WPF项目实例&#xff0c;看看和传统的.NET Framework有什么区别&#xff01;开发环境&#xff1a;VS2019 WPF框架&#xff1a;Caliburn.Micro 版本4.0.173.NET版本&#xff1a;.NET5.0项目创建步…

五个最佳案例带你解读 Node.js 的前后之道

Node.js 是什么&#xff1f; Node.js 采用 C语言编写而成&#xff0c;浏览器内核 V8 做为执行引擎&#xff1b; Node 不是 JS 应用、而是一个 Javascript 的运行环境。 Node 保留了前端浏览器 js 的接口&#xff0c;没有改写语言本身的任何特性&#xff0c;依旧基于作用域和原型…

【ArcGIS风暴】根据海拔范围分级统计GIMMS 3g NDVI平均值案例教程——以甘肃省为例

在论文写作时,通常要根据区域进行统计栅格数据。本文以甘肃省dem、NDVI数据为例,讲解根据海拔范围分级统计NDVI平均值、最大值、最小值和面积等。 1. 海拔分类 dem是本案例的最基本数据,打开ArcMap,加载dem数据,如下图所示: 首先要对dem进行分级,所使用的到的工具是重分…

【转】知道这20个正则表达式,能让你少写1,000行代码

正则表达式&#xff0c;一个十分古老而又强大的文本处理工具&#xff0c;仅仅用一段非常简短的表达式语句&#xff0c;便能够快速实现一个非常复杂的业务逻辑。熟练地掌握正则表达式的话&#xff0c;能够使你的开发效率得到极大的提升。下面是技匠整理的&#xff0c;在前端开发…

Lintcode165 Merge Two Sorted Lists solution 题解

【题目描述】Merge two sorted (ascending) linked lists and return it as a new sorted list. The new sorted list should be made by splicing together the nodes of the two lists and sorted in ascending order.将两个排序链表合并为一个新的排序链表.【题目链接】www.…

Dapr中国社区网站(预览版)发布!

点击蓝字关注我们社区介绍Dapr 是一个可移植的、事件驱动的运行时&#xff0c;它使任何开发人员能够轻松构建出弹性的、无状态和有状态的应用程序&#xff0c;并可运行在云平台或边缘计算中。Dapr 中国社区是一个以 Dapr 为中心的中立而开放的技术社区&#xff0c;为 Dapr 用户…

【ArcGIS风暴】ArcGIS自动生成标识码(BSM)的两种方法案例教程

1. 标识码编制规则 按照每个图层要素的标识码应具有唯一代码的基本要求,根据《GB/T 7027-2002 信息分类和编码的基本原则与方法》规定的信息分类原则和方法,要素标识码采用二层 20 位层次码结构,由村级行政区划代码、要素标识码顺序号构成。具体如下: (1)第一层为村级行…

数据分析入门_char01

数据分析入门_char01 转载于:https://www.cnblogs.com/zsr0401/p/6370697.html

ubuntu kvm 部署安装   快照

cat /proc/cpuinfo | egrep vmx|svmapt-get install qemu-kvm libvirt-bin virt-managerbridge-utilslsmod | grep kvmvirsh -c qemu:///system list这个是安装kvm 然后添加虚拟机qemu-img info aa.img 查看虚拟机现在的事什么格式qemu-img convert -f raw -O qcow2 aa.img…

将excel多个工作表(表结构相同)合并后生成csv文件

import csv import openpyxl as xls import pandas as pd import codecswb xls.load_workbook(rE:\xlsxFile.xlsx) # 获取workbook中所有的表格 sheets wb.get_sheet_names() dataRows [] # 循环遍历所有sheet for t in range(len(sheets)):sheet wb.get_sheet_by_name(she…

【BIM入门实战】Revit2018项目模板、族库图文安装教程

【扩展阅读】:【MIB】Win11平台上Revit 2018_x64简体中文版图文安装与卸载完整教程 一、Revit 族库、项目样板缺失的产生原因 1、断网或者网络不稳定环境下安装Revit。 2、Revit配置安装界面中取消勾选“Autodesk Revit Content Librabries”。 3、下载了没有自带族库的软件…