阶乘因式分解(一)

原创 2018年04月15日 20:28:37

阶乘因式分解(一)

时间限制:3000 ms  |  内存限制:65535 KB
难度:2
描述

给定两个数m,n,其中m是一个素数。

将n(0<=n<=10000)的阶乘分解质因数,求其中有多少个m。

输入
第一行是一个整数s(0<s<=100),表示测试数据的组数
随后的s行, 每行有两个整数n,m。
输出
输出m的个数。
样例输入
2
100 5
16 2
样例输出
24
15
来源
网络
上传者

苗栋栋


此题不能按照正常的直接求阶乘然后计算,而应该分开计算。

比如16中2的倍数为16 14 12 10 8 6 4 2就这8个,他们在阶乘中表示为16*14*12*10*8*6*4*2

第一次:当每个中提取出来一个2时,为8*7*6*5*4*3*2*1

为什么这样弄呢,我们可以这样想,16/2=8,所以说这个8是第一次提取分开2时的最大的数,并且第一次得有16/2=8个2的倍数

第二次:只有8*6*4*2中为2的倍数,此时再提取2得4*3*2*1

即为8/2=4,因为第一次剩下的2得倍数中8是最大的,所以再次提取2时,8/2=4的4是第二次中最大的2的倍数,并且第二次得有8/2=4个2的倍数

第三次:只有4*2为2的倍数,此时再次提取2得2*1

即为4/2=2,道理同上

第四次:只有1,此时结束,我们可以看做第四次时剩下的2/2=1,1为此时最大的,但1/2=0,所以不可能有接下来的。

最关键为:每次除以2都是下一次的倍数的最大值

关键代码:

while(n)
		{
		
			if(n/m!=0)
			count+=(n/m);
			n=(n/m);
		}
完整代码
#include<stdio.h>
int main()
{
	int q,n,m;
	scanf("%d", &q);
	while(q--)
	{
		int count=0;
		scanf("%d", &n);
		scanf("%d", &m);
		while(n)
		{
		
			if(n/m!=0)
			count+=(n/m);
			n=(n/m);
		}
		printf("%d\n", count);
	}
	return 0;
 } 
#include<iostream>//最优程序
using namespace std;
int get(int n,int num)
{
    if(n==0) return 0;
    else return get(n/num,num)+n/num;
}
int main()
{
    int n;
    cin>>n;
    while(n--)
    {
        int a,b;
        cin>>a>>b;
        cout<<get(a,b)<<endl;
    }
}        
最优程序我表示还没看懂

70 NYOJ 阶乘因式分解(二)

阶乘因式分解(二) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 给定两个数n,m,其中m是一个素数。 将n(0 注...
  • yjf3151731373
  • yjf3151731373
  • 2016-05-26 19:13:02
  • 389

南阳oj 阶乘因式分解(一)

/* 前提:1 2...n 能被m整除的数有n/m 1*2*3*...n的阶乘一定有k=n/m个m 而且这k个m一定来自 1m 2m ....km(因为m是素数所以不会有两个数相乘后产生m的情...
  • u013491149
  • u013491149
  • 2014-10-17 13:52:33
  • 364

NYOJ 阶乘因式分解(一)

阶乘因式分解(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 给定两个数m,n,其中m是一个素数。 将n(0 输...
  • Scarlett_geng
  • Scarlett_geng
  • 2016-07-19 16:39:30
  • 800

【NYOJ】[56]阶乘因式分解(一)

题目细想之下并不难不过确实也能引发一些思考
  • u011493189
  • u011493189
  • 2016-01-26 22:01:30
  • 134

nyoj-阶乘因式分解(一)

阶乘因式分解(一) 给定两个数m,n,其中m是一个素数。 将n(0 输入第一行是一个整数s(0 随后的s行, 每行有两个整数n,m。 输出输出m的个数。 ...
  • u013746460
  • u013746460
  • 2014-03-05 17:30:03
  • 394

阶乘因式分解(一) -- ACM解决方案

阶乘因式分解(一) 描述 给定两个数m,n,其中m是一个素数。将n(0 输入 第一行是一个整数s(0 输出 输出m的个数。 样例输入 2 100 5 16 2 样例输出 24 15 =========...
  • liushall
  • liushall
  • 2017-05-30 09:26:41
  • 138

NYOJ - 56 - 阶乘因式分解(一)(阶乘的质因数个数)

描述 给定两个数m,n,其中m是一个素数。 将n(0 输入第一行是一个整数s(0 随后的s行, 每行有两个整数n,m。 输出输出m的个数。 样例输入 2 ...
  • qq_34594236
  • qq_34594236
  • 2016-10-28 12:57:06
  • 326

阶乘因式分解(二) nyist

描述 给定两个数n,m,其中m是一个素数。 将n(0 注:^为求幂符号。   输入第一行是一个整数s(0 随后的s行, 每行有两个整数n,m。 ...
  • lois_123
  • lois_123
  • 2014-10-29 21:14:35
  • 418

ACM-阶乘因式分解(一)

描述 给定两个数m,n,其中m是一个素数。 将n(0 输入第一行是一个整数s(0 随后的s行, 每行有两个整数n,m。输出输出m的个数。样例输入 2 100 5 16 2 样例输出...
  • u012701023
  • u012701023
  • 2015-05-15 11:47:01
  • 520

阶乘的因式分解(一)

今天做oj,发现一道题挺有意思的。题目如下: 阶乘因式分解(一) 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 给定两个数m,n,其中m是一个素数。 ...
  • Amily_K
  • Amily_K
  • 2015-04-11 13:18:57
  • 538
收藏助手
不良信息举报
您举报文章:阶乘因式分解(一)
举报原因:
原因补充:

(最多只允许输入30个字)