• Harry Potter and the Hide Story(hdu3988)


    Harry Potter and the Hide Story

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


    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
     思路:素数分解;
    当K = 1的时候肯定输出inf;我们将n分解成素数的乘积,那么我们需要找m!分解后含有这些素数的个数cnt[pi],那么最高次就是min(cnt[pi]/cnt1[pi]);cnt1[pi]为n中pi的个数。
     1 #include<stdio.h>
     2 #include<algorithm>
     3 #include<iostream>
     4 #include<queue>
     5 #include<set>
     6 #include<math.h>
     7 #include<string.h>
     8 using namespace std;
     9 typedef unsigned long long LL;
    10 bool prime[10000015];
    11 LL ans[1000000];
    12 LL prime_table[10000];
    13 LL pr_cnt[10000];
    14 LL pr_cn[10000];
    15 LL slove(LL n,LL m,int cn);
    16 int main(void)
    17 {
    18         int T;
    19         scanf("%d",&T);
    20         int i,j;
    21         for(i = 2; i < 10000; i++)
    22         {
    23                 if(!prime[i])
    24                 {
    25                         for(j = i; (i*j) <= 10000010; j++)
    26                         {
    27                                 prime[i*j] = true;
    28                         }
    29                 }
    30         }
    31         int cn = 0;
    32         for(i = 2; i < 10000010; i++)
    33                 if(!prime[i])ans[cn++] = i;
    34         int __ca = 0;
    35         while(T--)
    36         {
    37                 LL n,m;
    38                 __ca++;
    39                 scanf("%llu %llu",&m,&n);
    40                 printf("Case %d: ",__ca);
    41                 if(n == 1)
    42                         printf("inf
    ");
    43                 else
    44                 {
    45                         printf("%llu
    ",slove(n,m,cn));
    46                 }
    47         }
    48         return 0;
    49 }
    50 LL slove(LL n,LL m,int cn)
    51 {
    52         int bn = 0;
    53         int f = 0;
    54         bool flag  = false ;
    55         memset(pr_cnt,0,sizeof(pr_cnt));
    56         memset(pr_cn,0,sizeof(pr_cn));
    57         while(n>1)
    58         {
    59                 while(n%ans[f]==0)
    60                 {
    61                         if(!flag)
    62                         {
    63                                 flag = true;
    64                                 bn++;
    65                                 prime_table[bn] = ans[f];
    66                         }
    67                         pr_cnt[bn]++;
    68                         n/=ans[f];
    69                 }
    70                 f++;
    71                 flag = false;
    72                 if((LL)ans[f]*(LL)ans[f] > n)
    73                         break;
    74         }
    75         if(n > 1)
    76         {
    77                 bn++;
    78                 prime_table[bn] = n;
    79                 pr_cnt[bn]++;
    80         }//printf("%d
    ",n);
    81         LL maxx = -1;
    82         for(int i = 1; i <= bn; i++)
    83         {      //printf("%llu
    ",prime_table[i]);
    84                 LL v = m;
    85                 while(v)
    86                 {
    87                         v/=(LL)prime_table[i];
    88                         pr_cn[i]+=v;
    89                 }
    90                 if(maxx == -1)
    91                 {
    92                         maxx = (LL)pr_cn[i]/(LL)pr_cnt[i];
    93                 }
    94                 else
    95                         maxx = min((LL)pr_cn[i]/(LL)pr_cnt[i],maxx);
    96         }
    97         return maxx;
    98 }
    油!油!you@
  • 相关阅读:
    QT中使用CoInitializeEx
    Linux 声音采集的时候内容全都是0
    linux类似系统中编译依赖库出现error trying to exec cc1plus
    C语言练习题2
    进程和任务计划管理
    解决火车头7.6版本无法采集部分https网站处理方法
    PHP输出13位时间戳函数
    destoon取消公司名称怎重复注册的限制
    destoon取消公司名称怎重复注册的限制
    destoon伪静态地址空值优化
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/5925707.html
Copyright © 2020-2023  润新知