HDU5514 Frogs
2024-09-08 05:03:48
/*
HDU5514 Frogs
http://acm.hdu.edu.cn/showproblem.php?pid=5514
容斥原理
*
*
*/
#include <cstdio>
#include <cmath>
#include <algorithm>
//#define test
using namespace std;
const long long Nmax=1e5;
long long n,m,a[Nmax];
long long book[Nmax];
long long p[Nmax];
int cnt;
long long num[Nmax];
long long gcd(long long a,long long b)
{
if(b==0LL)
return a;
return gcd(b,a%b);
} int main()
{
long long t;
#ifdef test
while()
{
long long a,b;
scanf("%lld%lld",&a,&b);
printf("%lld\n",gcd(a,b));
}
#endif
scanf("%lld",&t);
for(long long ttt=;ttt<=t;ttt++)
{
scanf("%lld%lld",&n,&m);
int flag=;
for(long long i=;i<=n;i++)
{
scanf("%lld",&a[i]);
a[i]=gcd(a[i],m);
if(a[i]==)
flag=;
}
if(flag)
{
long long ans=(m-1LL)*m/2LL;
printf("Case #%lld: ",ttt);
printf("%lld\n",ans);
continue;
}
long long ans=0LL;
cnt=;
for(int i=;i*i<=m;i++)
{
if(m%i)
continue;
p[++cnt]=i;
if(i*i!=m)
p[++cnt]=m/i;
}
sort(p+,p++cnt);
for(int i=;i<=cnt;i++)
book[i]=num[i]=;
for(int i=;i<=n;i++)
{
for(int j=;j<=cnt;j++)
if(p[j]%a[i]==)
book[j]=;
}
for(int i=;i<=cnt;i++)
{
if(book[i]!=num[i])
{
long long tmp=m/p[i];
ans+=tmp*(tmp-1LL)/2LL*p[i]*(book[i]-num[i]);
tmp=book[i]-num[i];
for(int j=i+;j<=cnt;j++)
if(p[j]%p[i]==)
num[j]+=tmp;
}
} printf("Case #%lld: ",ttt);
printf("%lld\n",ans);
}
return ;
}
最新文章
- quartz定时+log4net日志+exchangeservice发邮件
- PHP+MYSQL网站SQL Injection攻防
- Xcode找不到模拟器出现";My Mac";
- Jquery超简单遮罩层实现代码
- SharePoint 2010中重置windows 活动目录(AD)域用户密码的WebPart(免费下载)
- UVa 213,World Finals 1991,信息解码
- javascript console
- 递推DP HDOJ 5328 Problem Killer
- PHP Apache Access Log 分析工具 拆分字段成CSV文件并插入Mysql数据库分析
- 剑指offier第三题
- 为什么要用on()而不直接使用click
- 复制virtualenv环境到其他服务器环境配置的方法
- WPF 数字小键盘Themes
- HBase MVCC 代码阅读(一)
- 01迷宫 洛谷 p1141
- windows下实现linux的远程访问以及linux上文件的上传和下载
- Shell命令-文件及内容处理之cat、tac
- SPI有关CPOL和CPHA的时序图
- 在TQ2440开发板上ping 127.0.0.1不通
- 学习使用 ARM 的 math 库,据说 速度比C标准库 自带的 快 几十倍 到几百倍