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 ...
随机推荐
- DDD心得
使用DDD分层架构有哪些好处 帮你更集中的管理业务逻辑. 帮你降低各层间,以及各业务模块间的依赖关系. 帮你更方便的进行单元测试. 我的DDD分层架构使用经验 使用充血模型,将业务逻辑尽量放到领域实体 ...
- jquery 之for 循环
jquery 的 for 循环: 1. var userList = [11,22,33,44]; $.each(userList,function(i,item){ console.log(i, i ...
- Dom4j操作XML文件
1. 创建并写入XML public static void writeXML(String filename){ try { Document document = DocumentHelper.c ...
- 2>&1 linux
2>&1使用 2>&1使用 一 相关知识 1)默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |).2)默认地,标准的输出为终端(terminal),但是也可 ...
- 第 2 章 VBScript基本概念
学习导航 VBScript 基本知识 变量.常量.数组 算术.逻辑.比较 运算符 2.1 VBScript是什么 VBScript程序语言是Microsoft公司VB(Visual Basic)程序语 ...
- 魔术方法__sleep 和 __wakeup
感觉序列化和反序列化用得倒是比较少了,而json_encode和json_decode用得相对多,都是转化成串,进行入库.传输等.json更方便,但是序列化和反序列化结合这两个魔术方法使用倒还行< ...
- [Tool] SourceTree操作中遇到错误(Filename too long)的解决方案
[Tool] SourceTree操作中遇到错误(Filename too long)的解决方案 问题情景 使用SourceTree,可以方便开发人员使用图形化接口的Git指令来管理原始码.但是在Wi ...
- jq倾斜的动画导航菜单
效果预览网址:http://keleyi.com/keleyi/phtml/jqmenu/index.htm 支持IE.Chrome.火狐等浏览器 完整源代码,保存到HTML文件打开也可查看效果: & ...
- iOS Version 和 Build 版本号
Version 和 Build 版本号 开发者都知道,无论是对于 iOS 和 Android 的应用,每个应用都有两个不同的版本号.分别是: Version Build(在 Android 上叫 Ve ...
- Android开发—已root的手机获取data路径
开发android的时候,尽管手机已经root但是DDMS中还是没有data/data路径怎么办? 可以用cmd命令提示符为逐个文件夹设置权限: 打开cmd,输入 adb shell 回车—> ...