HDU 3988 n!质因数分解

Harry Potter and the Hide Story

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 2324    Accepted Submission(s): 569

Problem Description

iSea is tired of writing the story of Harry Potter, so, lucky you, solving the following problem is enough.

Input

The first line contains a single integer T, indicating the number of test cases.
Each test case contains two integers, N and K.

Technical Specification

1. 1 <= T <= 500
2. 1 <= K <= 1 000 000 000 000 00
3. 1 <= N <= 1 000 000 000 000 000 000

Output

For each test case, output the case number first, then the answer, if the answer is bigger than 9 223 372 036 854 775 807, output “inf” (without quote).

Sample Input

2

2 2

10 10

Sample Output

Case 1: 1

Case 2: 2

题意:

给两个数n和k,范围题中给出,然后求最大的 i 使得n!%(k^i)==0。

思路:

若想n!%(k^i)==0,那么k的质因数全部包含在n!中,那么找出k的质因数和n!的质因数,若两质因数相等,该质因数在k中含有b个,在n!中含有a个,那么算出a/b,对于所有不同的质因数算出a/b,那么最小的a/b就是所求的 i (木桶效应)。

代码:

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <vector>
 5 #include <iostream>
 6 using namespace std;
 7 #define N 10000005
 8
 9 __int64 n, m;
10 int p[N], tot;
11 int vis[N];
12
13 void init_p(){          //由于k最大为1<<15,那么初始化素数到1<<8就行了
14     int i, j;
15     tot=0;
16     for(i=2;i<N;i++){
17         if(!vis[i]) p[tot++]=i;
18         for(j=0;j<tot&&p[j]*i<N;j++){
19             vis[p[j]*i]=1;
20             if(i%p[j]==0) break;
21         }
22     }
23 }
24
25 __int64 nn(__int64 a,__int64 b){    //算出n!包含质因数b的个数 ,不懂请看《编程之美》第2.2
26     __int64 ans=0;
27     while(a){
28         a/=b;
29         ans+=a;
30     }
31     return ans;
32 }
33
34 main()
35 {
36     __int64 a, b, MINH;
37     init_p();
38     int i, j, k, kase=1;
39     int t;
40     cin>>t;
41     while(t--){
42         scanf("%I64d %I64d",&n,&m);
43         MINH=-1;
44         if(m==1){
45             printf("Case %d: inf\n",kase++);continue;
46         }
47         for(i=0;i<tot&&p[i]<=m;i++){
48            b=0;
49            if(m%p[i]!=0) continue;
50             while(m%p[i]==0){
51                 m/=p[i];
52                 b++;
53             }
54             a=nn(n,p[i]);
55             a/=b;
56             if(MINH==-1) MINH=a;
57             else MINH=min(MINH,a);
58         }
59         if(m>1){           //由于咱们需要把m全部包含到n!中,防止m还有剩余,所以有了这个函数
60
61             a=nn(n,m);//printf("1111111111\n");
62             if(MINH==-1) MINH=a;
63             else MINH=min(MINH,a);
64         }
65         printf("Case %d: %I64d\n",kase++,MINH);
66     }
67 }

HDU 3988 n!质因数分解,布布扣,bubuko.com

时间: 2024-12-26 07:58:58

HDU 3988 n!质因数分解的相关文章

HDU 1695 GCD 欧拉函数+容斥原理+质因数分解

链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 题意:在[a,b]中的x,在[c,d]中的y,求x与y的最大公约数为k的组合有多少.(a=1, a <= b <= 100000, c=1, c <= d <= 100000, 0 <= k <= 100000) 思路:因为x与y的最大公约数为k,所以xx=x/k与yy=y/k一定互质.要从a/k和b/k之中选择互质的数,枚举1~b/k,当选择的yy小于等于a/k时,可以

HDU 3988 Harry Potter and the Hide Story(数论-整数和素数)

Harry Potter and the Hide Story Problem Description iSea is tired of writing the story of Harry Potter, so, lucky you, solving the following problem is enough. Input The first line contains a single integer T, indicating the number of test cases. Eac

【BZOJ2227】【ZJOI2011】看电影 [组合数学][质因数分解]

看电影 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 到了难得的假期,小白班上组织大家去看电影.但由于假期里看电影的人太多,很难做到让全班看上同一场电影,最后大家在一个偏僻的小胡同里找到了一家电影院.但这家电影院分配座位的方式很特殊,具体方式如下: 1. 电影院的座位共有K个,并被标号为1…K,每个人买完票后会被随机指定一个座位,具体来说是从1…K中等可能的随机选取一个正整数,设其为L.

Codevs 1313 质因数分解

1313 质因数分解 题目描述 Description 已知正整数 n是两个不同的质数的乘积,试求出较大的那个质数 . 输入描述 Input Description 输入只有一行,包含一个正整数 n. 输出描述 Output Description 输出只有一行,包含一个正整数p,即较大的那个质数. 样例输入 Sample Input 21 样例输出 Sample Output 7 #include<iostream> #include<cstdio> #include<cm

求n!质因数分解之后素数a的个数

n!质因数分解后P的个数=n/p+n/(p*p)+n/(p*p*p)+......直到n<p*p*p*...*p //主要代码,就这么点东西,数学真是厉害啊!幸亏我早早的就退了数学2333 do { n/=m; w+=n; }while(n);

3164 质因数分解

3164 质因数分解 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description (多数据)给出t个数,求出它的质因子个数. 数据没坑,难度降低. 输入描述 Input Description 第一行 t 之后t行 数据 输出描述 Output Description t行 分解后结果(质因子个数) 样例输入 Sample Input 2 11 6 样例输出 Sample Output 1 2 数据范围及提示 Data

莫比乌斯函数-质因数分解

1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数). 具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如:miu(4), miu(12), miu(18) = 0. 如果一个数不包含平方因子,并且有k个不同的质因子,那么miu(n)

质因数分解(0)&lt;P2012_1&gt;

质因数分解 (prime.cpp/c/pas) [问题描述] 已知正整数n是两个不同的质数的乘积,试求出较大的那个质数. [输入] 输入文件名为prime.in. 输入只有一行,包含一个正整数n. [输出] 输出文件名为prime.out. 输出只有一行,包含一个正整数p,即较大的那个质数. [数据范围] 对于60%的数据,6 ≤ n ≤ 1000. 对于100%的数据,6 ≤ n ≤ 2*109.

51nod 1240 莫比乌斯函数 (质因数分解)

1240 莫比乌斯函数 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 取消关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.(据说,高斯(Gauss)比莫比乌斯早三十年就曾考虑过这个函数). 具体定义如下: 如果一个数包含平方因子,那么miu(n) = 0.例如:miu(4), miu(12), miu(18) = 0. 如果一个数不包含平方因子,并且有k个不同的质因