zoukankan      html  css  js  c++  java
  • HDU5514 Frogs

     1 /*
     2  HDU5514 Frogs
     3  http://acm.hdu.edu.cn/showproblem.php?pid=5514
     4  容斥原理
     5  *
     6  *
     7  */
     8 #include <cstdio>
     9 #include <cmath>
    10 #include <algorithm>
    11 //#define test
    12 using namespace std;
    13 const long long Nmax=1e5;
    14 long long n,m,a[Nmax];
    15 long long book[Nmax];
    16 long long p[Nmax];
    17 int cnt;
    18 long long num[Nmax];
    19 long long gcd(long long a,long long b)
    20 {
    21     if(b==0LL)
    22         return a;
    23     return gcd(b,a%b);
    24 }
    25 
    26 int main()
    27 {
    28     long long t;
    29     #ifdef test
    30     while(1)
    31     {
    32         long long a,b;
    33         scanf("%lld%lld",&a,&b);
    34         printf("%lld
    ",gcd(a,b));
    35     }
    36     #endif
    37     scanf("%lld",&t);
    38     for(long long ttt=1;ttt<=t;ttt++)
    39     {
    40         scanf("%lld%lld",&n,&m);
    41         int flag=0;
    42         for(long long i=1;i<=n;i++)
    43         {
    44             scanf("%lld",&a[i]);
    45             a[i]=gcd(a[i],m);
    46             if(a[i]==1)
    47                 flag=1;
    48         }
    49         if(flag)
    50         {
    51             long long ans=(m-1LL)*m/2LL;
    52             printf("Case #%lld: ",ttt);
    53             printf("%lld
    ",ans);
    54             continue;
    55         }
    56         long long ans=0LL;
    57         cnt=0;
    58         for(int i=2;i*i<=m;i++)
    59         {
    60             if(m%i)
    61                 continue;
    62             p[++cnt]=i;
    63             if(i*i!=m)
    64                 p[++cnt]=m/i;
    65         }
    66         sort(p+1,p+1+cnt);
    67         for(int i=1;i<=cnt;i++)
    68             book[i]=num[i]=0;
    69         for(int i=1;i<=n;i++)
    70         {
    71             for(int j=1;j<=cnt;j++)
    72                 if(p[j]%a[i]==0)
    73                     book[j]=1;
    74         }
    75         for(int i=1;i<=cnt;i++)
    76         {
    77             if(book[i]!=num[i])
    78             {
    79                 long long tmp=m/p[i];
    80                 ans+=tmp*(tmp-1LL)/2LL*p[i]*(book[i]-num[i]);
    81                 tmp=book[i]-num[i];
    82                 for(int j=i+1;j<=cnt;j++)
    83                     if(p[j]%p[i]==0)
    84                         num[j]+=tmp;
    85             }
    86         }
    87 
    88         printf("Case #%lld: ",ttt);
    89         printf("%lld
    ",ans);
    90     }
    91     return 0;
    92 }
  • 相关阅读:
    java strtus2 拦截器(Interceptors)
    java ssm框架入门(三)正式项目的web.xml配置
    java Web监听器导图详解
    java web hello world(二)基于Servlet理解监听
    java ssm框架入门(二)添加语言滤器
    java web 自定义filter
    Java内存分配全面浅析
    Velocity !$ 和$!区别
    spring ioc原理(看完后大家可以自己写一个spring)
    Spring的AOP简单理解
  • 原文地址:https://www.cnblogs.com/BBBob/p/6624856.html
Copyright © 2011-2022 走看看