NYOJ 70
描述:给定两个数n,m,其中m是一个素数。
将n(0<=n<=2^31)的阶乘分解质因数,求其中有多少个m。
注:^为求幂符号。
输入:
第一行是一个整数s(0<s<=100),表示测试数据的组数
随后的s行, 每行有两个整数n,m。
输出:
输出m的个数
样例输入
3
100 5
16 2
1000000000 13
- 样例输出
24 15 83333329
当n,m体量很小的时候,用这个代码就可以AC:
#include <iostream>
using namespace std; //测试分解test中有多少个m
int num_m(int test,int m){
int res = ;
while(test%m==){
res++;
test/=m;
}
return res;
} int main(){
int s;
cin>>s;
while(s--){
int n,m ;
cin>>n>>m ;
int res = ;
for(int i=n;i>=;i-- ){
res+= num_m(i,m);
}
cout<<res<<endl;
} }
但是实际情况是这个数还是比较大的,已经达到了2^31量级,所以上面暴力的解法是超时的。
接下来我们考虑:比如n=100,m=5.的情况,这个时候100当中有5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100
这些数能够整除5;其中25,50,75,100又能整除25=5^2,所以可以分解出两个5,因为第一遍的时候已经加过一次了,所以最多只能分解出20+4=24个5.
按照这个思想,我们不妨设置这样一个算法:让n循环除以m,每次得到的商是本次循环中能够整除m的个数,然后n=n/m赋予n新值。n缩小为原来的1/m,继续循环直到n=0为止。这样以来,"数值上接近于n的那些数能够分解质因数m的个数"恰好等于"接近于m及m的小倍数的这些数的计算的次数",如此对称下去,从而巧妙的完成了计算。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h> int main(){
int N;
scanf("%d",&N);
while(N--){
int n,m,sum=;
scanf("%d%d",&n,&m);
while(n){
sum+=n/m;//计算n中有多少个能整除m的数;
n/=m; // 计算n中有多少个能够整除m^2的数; //n = n/m 这样就把n的大小缩小成了原来的(1/m)
}
printf("%d\n",sum);
} return ;
}
NYOJ 70的更多相关文章
- nyoj 70 阶乘因式分解(二)
点击打开链接 阶乘因式分解(二) 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 给定两个数n,m,其中m是一个素数. 将n(0<=n<=2^31)的阶乘分解 ...
- NYOJ 1007
在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...
- Oracle手边常用70则脚本知识汇总
Oracle手边常用70则脚本知识汇总 作者:白宁超 时间:2016年3月4日13:58:36 摘要: 日常使用oracle数据库过程中,常用脚本命令莫不是用户和密码.表空间.多表联合.执行语句等常规 ...
- NYOJ 998
这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...
- SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率
应网友的要求,抽了点时间写了这个Demo,希望对2.2版想升级到3.0的朋友或正在使用3.0的朋友有所帮助.大家在使用Demo过程中如果发现什么问题或有什么建议,可以直接将Bug提交给我或告诉我,我会 ...
- 【转】70个经典的 Shell 脚本面试问题
我们为你的面试准备选择了 70 个你可能遇到的 shell 脚面问题及解答.了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务.在过去的几年里,我们注意到所有 ...
- NYOJ 333
http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...
- 读取70开头的xml,gbk转成utf-8
//读取70开头的xml,gbk转成utf-8 //InputStream is = new FileInputStream(super.getFile());//文件读取 //InputStream ...
- Connection broken for id 62, my id = 70, error =
启动费zokeeper失败,报错如下:Connection broken for id 62, my id = 70, error = 原因是因为zoo.cfg中server.id不正确. serve ...
随机推荐
- C#File类常用的文件操作方法(创建、移动、删除、复制等)
File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和 打开一个文件. File类方法的参量很多时候都是路径path ...
- C#文件或文件夹压缩和解压方法(通过ICSharpCode.SharpZipLib.dll)
我在网上收集一下文件的压缩和解压的方法,是通过ICSharpCode.SharpZipLib.dll 来实现的 一.介绍的目录 第一步:下载压缩和解压的 ICSharpCode.SharpZipLib ...
- UIAlertController 部分用法及属性
//创建UIAlertController:初始化UIAlertController 需要使用alertControllerWithTitle UIAlertController *alertCont ...
- Collection框架
Collection框架 集合框架(Collection Framework)泛指java.util包的若干个类和接口.如Collection,List,ArrayList,LinkedList,Ve ...
- [moka同学笔记]使用composer 安装yii2以及遇到的问题
[一.Yii2安装过程] 使用composer安装,composer安装请参考其他博客 1.下载 Yii2 高级模板 跟普通模板一样 , 可以通过 Composer 和 github 下载 ,不过官方 ...
- browserify压缩合并源码反编译
最近在学习钉钉(一个协作应用)桌面应用的前端源码时候,发现其js源码是用browserify做模块开发.于是想还原其源码的原本的目录结构,学习它的目录分类以及业务划分. 前言 用过browserify ...
- 网站已迁移至:https://tasaid.com/
个人网站:http://tasaid.com/ 主要文章在 个人网站 更新,尽可能在博客园同步更新. github:https://github.com/linkFly6 或者可以参与到我目前正在开发 ...
- iOS开发-UI 从入门到精通(二)
iOS开发-UI 从入门到精通(二)是对 iOS开发-UI 从入门到精通(一)知识点的巩固,主要以习题练习为主,增强实战经验,为以后做开发打下坚实的基础! ※开发环境和注意事项: 1.前期iOS-UI ...
- iOS面试题总结(一)
面试题总结 1.#import 跟#include.@class有什么区别?#import<> 跟 #import""又什么区别? include和#import都能完 ...
- iOS 限制TextField输入长度(标准)
iOS 限制TextField输入长度(标准) 网上有很多限制textField输入长度方法,但是我觉得都不是很完美,准确来说可以说是不符合实际开发的要求,因此在这里整理一下textField限制输入 ...