描述:给定两个数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的更多相关文章

  1. nyoj 70 阶乘因式分解(二)

    点击打开链接 阶乘因式分解(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 给定两个数n,m,其中m是一个素数. 将n(0<=n<=2^31)的阶乘分解 ...

  2. NYOJ 1007

    在博客NYOJ 998 中已经写过计算欧拉函数的三种方法,这里不再赘述. 本题也是对欧拉函数的应用的考查,不过考查了另外一个数论基本定理:如何用欧拉函数求小于n且与n互质所有的正整数的和. 记eule ...

  3. Oracle手边常用70则脚本知识汇总

    Oracle手边常用70则脚本知识汇总 作者:白宁超 时间:2016年3月4日13:58:36 摘要: 日常使用oracle数据库过程中,常用脚本命令莫不是用户和密码.表空间.多表联合.执行语句等常规 ...

  4. NYOJ 998

    这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...

  5. SubSonic3.0 Demo1.0——应用了T4模版可减少开发过程中70%以上的代码量以及80%以上的出错率

    应网友的要求,抽了点时间写了这个Demo,希望对2.2版想升级到3.0的朋友或正在使用3.0的朋友有所帮助.大家在使用Demo过程中如果发现什么问题或有什么建议,可以直接将Bug提交给我或告诉我,我会 ...

  6. 【转】70个经典的 Shell 脚本面试问题

    我们为你的面试准备选择了 70 个你可能遇到的 shell 脚面问题及解答.了解脚本或至少知道基础知识对系统管理员来说至关重要,它也有助于你在工作环境中自动完成很多任务.在过去的几年里,我们注意到所有 ...

  7. NYOJ 333

    http://www.cppblog.com/RyanWang/archive/2009/07/19/90512.aspx?opt=admin 欧拉函数 E(x)表示比x小的且与x互质的正整数的个数. ...

  8. 读取70开头的xml,gbk转成utf-8

    //读取70开头的xml,gbk转成utf-8 //InputStream is = new FileInputStream(super.getFile());//文件读取 //InputStream ...

  9. Connection broken for id 62, my id = 70, error =

    启动费zokeeper失败,报错如下:Connection broken for id 62, my id = 70, error = 原因是因为zoo.cfg中server.id不正确. serve ...

随机推荐

  1. node.js 的事件驱动

    events 模块只提供了一个对象: events.EventEmitter. EventEmitter 的核心就是事件发射与事件监听器功能的封装.EventEmitter 的每个事件由一个事件名和若 ...

  2. EC笔记:第二部分:11:在operator=中处理“自我赋值”

    已经一年半没有写过博客了,最近发现学过的知识还是需要整理一下,为知笔记,要开始收费了以前写在为知笔记上笔记也会慢慢的转到博客里. 话不多说,进入正题. 考虑考虑以下场景: 当某个对象对自身赋值时,会出 ...

  3. python之redis和memcache操作

    Redis 教程 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据 ...

  4. Lind.DDD.ILogicDeleteBehavor~逻辑删除的实现

    回到目录 关于逻辑删除 对于逻辑删除之前的做法是在实体类中加个字段,一般是status,其中一种状态是删除,当然也有其它做法,如加个bool的字段IsDeleted,这些其实都过于武断,即它在基类里加 ...

  5. 15、ASP.NET MVC入门到精通——MVC-路由

    本系列目录:ASP.NET MVC4入门到精通系列目录汇总 Routing(路由) – URL url 作为广泛使用的Web用户接口,需要被重视 好的Url应该满足如下条件: URL应为获取某种资源提 ...

  6. Semaphore(计数信号量)

    //对象池public class Pool<T> { private int size; private List<T> items = new ArrayList<T ...

  7. ArcGIS JS 学习笔记4 实现地图联动

    1.开篇 守望屁股实在太好玩了,所以最近有点懒,这次就先写个简单的来凑一下数.这次我的模仿目标是天地图的地图联动. 天地的地图联动不仅地图有联动,而且鼠标也有联动,我就照着这个目标进行山寨. 2.准备 ...

  8. elk查询语法

    查询指定IP段,如123.123.123.* geo.ip=123.123.123.*

  9. ReactiveCocoa代码实践之-RAC网络请求重构

    前言 RAC相比以往的开发模式主要有以下优点:提供了统一的消息传递机制:提供了多种奇妙且高效的信号操作方法:配合MVVM设计模式和RAC宏绑定减少多端依赖. RAC的理论知识非常深厚,包含有FRP,高 ...

  10. 在Linux上使用Nginx为Solr集群做负载均衡

    在Linux上使用Nginx为Solr集群做负载均衡 在Linux上搭建solr集群时需要用到负载均衡,但测试环境下没有F5 Big-IP负载均衡交换机可以用,于是先后试了weblogic的proxy ...