hdu5514 非2的次幂容斥原理
/*
1
126 223092870
210 330 390 462 510 546 570 690 714 770 798 858 910 966 1122 1155 1190 1254 1326 1330 1365 1430 1482 1518 1610 1785 1794 1870 1938 1995 2002 2090 2145 2210 2346 2415 2470 2530 2618 2622 2805 2926 2990 3003 3094 3135 3230 3315 3458 3542 3705 3795 3910 3927 4186 4370 4389 4485 4522 4641 4845 4862 5005 5187 5313 5434 5474 5865 6118 6279 6545 6555 6578 6783 7106 7293 7315 7735 8151 8211 8398 8602 8645 8855 9177 9614 9867 10166 10465 10659 11305 11362 12155 12597 12903 13585 13685 14421 14858 15249 15295 16445 17017 17043 17765 19019 20995 21505 22287 23023 24035 24871 25415 28405 29393 30107 33649 35581 37145 39767 46189 52003 55913 62491 81719 96577
*/
#include <cstdio>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <ctime>
#include <cmath>
#include <cctype>
#define N 10000
#define LL long long
#define U unsigned
using namespace std;
int cas=,T;
int n,m,a[N+],d[N+],dn,v[N+],c[N+];
int gcd(int a,int b)
{
return b==?a:gcd(b,a%b);
}
void fac()
{
dn=;
int x=sqrt(m)+0.5;
for(int i=;i<=x;i++)
{
if(m%i==)
{
d[dn++]=i;
d[dn++]=m/i;
}
}
sort(d,d+dn);
}
int main()
{
//freopen("1.in","w",stdout);
//freopen("1.in","r",stdin);
//freopen("out1","w",stdout);
scanf("%d",&T);
while(T--)
{
memset(v,,sizeof(v));//要走的次数
memset(c,,sizeof(c));//已经走的次数
scanf("%d%d",&n,&m);
set<int>g;
for(int i=;i<n;i++) { scanf("%d",a+i);g.insert(gcd(m,a[i]%m)); }
fac();
for(set<int>::iterator it=g.begin();it!=g.end();it++) //初始化,*it的倍数约数都要走一次
{
for(int j=;j<dn;j++) if(d[j]% *it==) v[j]=;
}
LL ans=;
//for(int i=0;i<dn;i++) printf("%d ",d[i]);printf("\n");
for(int i=;i<dn;i++)
{
if(v[i])
{
int dif=v[i]-c[i]; //d[i]本来要走的次数-已经走了的次数=现在要走的次数
ans+=(LL)m*(m/d[i]-)/*dif;
for(int j=i+;j<dn;j++) if(d[j]%d[i]==) c[j]+=dif;//d[i]走过之后d[i]的倍数也已经走了dif次,所以c[j]+=dif
}
}
printf("Case #%d: %lld\n",cas++,ans);
}
//printf("time=%.3lf",(double)clock()/CLOCKS_PER_SEC);
return ;
}
hdu5514 非2的次幂容斥原理的更多相关文章
- Gym - 100625F Count Ways 快速幂+容斥原理
题意:n*m的格子,中间有若干点不能走,问从左上角到右下角有多少种走法. 思路:CountWay(i,j) 表示从 i 点到 j 点的种数.然后用容斥原理加加减减解决 #pragma comment( ...
- 快速幂 递归&&非递归 模板
一.递归版快速幂 inline int qpow(int x,int y,int p){ if(y==0) return 1; int z=qpow(x,y>>1,p); z=1ll*z* ...
- 深入浅出HTTP协议(WEB开发和面试必备)
1. 基础概念篇 a.简介 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和 ...
- 深入理解http/https协议
深入理解HTTP协议(转) http协议学习系列 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(Wo ...
- HTTP请求 GET与POST是怎么实现?
1.HTTP请求格式: <request line> <headers> <blank line> [<request-body>] 在HTTP请求中, ...
- http中get和post的区别
HTTP定义了与服务器交互的不同方法,最基本的方法是 GET 和 POST. HTTP-GET和HTTP-POST是使用HTTP的标准协议动词,用于编码和传送变量名/变量值对参数,并且使用相关的请求语 ...
- 转载和积累系列 - 深入理解HTTP协议
深入理解HTTP协议 1. 基础概念篇 1.1 介绍 HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web C ...
- http get vs post
http get vs post GET与POST方法有以下区别:(1) 在客户端,Get方式在通过URL提交数据,数据在URL中可以看到:POST方式,数据放置在HTML HEADER内提交.(2) ...
- Http请求中POST与GET的区别——前端面试
一.原理区别 Http定义了与服务器交互的方法,其中最基本的四种是:GET,POST,PUT,DELETE,正对应着对资源的查,改,增,删.URL的全称是资源描述符,我们可以这样认为,一个URL地址, ...
随机推荐
- Haskell 笔记(三)类型系统
类型 (Type) Haskell的类型系统式静态类型系统,在编译的时候就知道数据类型,所以不同类型的值运算在编译的时候就会报错,比如用布尔值和整数运算,在C语言中这种运算就不会报错. Haskell ...
- Linux内核源代码
说明:只供学习交流 一,目录结构 Linux内核源代码采用树形结构进行组织,非常合理地把功能相关的文件都放在同一个子目录下,使得程序更具有可读性. 二,目录结构 arch目录 arch是archite ...
- 记一次修复被篡改的IE首页
今天开电脑,打开IE发现首页被篡改为http://www.you2000.cn/,下意识是恶意插件造成的,可是为什么金山卫士没发现呢(我电脑上只装了一个金山卫士)?我锁定首页的啊... 只好手动运行金 ...
- 消息队列NetMQ 原理分析1-Context和ZObject
前言 介绍 NetMQ是ZeroMQ的C#移植版本,它是对标准socket接口的扩展.它提供了一种异步消息队列,多消息模式,消息过滤(订阅),对多种传输协议的无缝访问. 当前有2个版本正在维护,版本3 ...
- Testlink1.9.14介绍及使用
Testlink简介 今天在为部门培训testlink的使用,顺便把相关片段记录下来. TestLink是一款开源的测试管理工具,主要用于进行测试过程的管理,通过使用TestLink提供的功能,可以 ...
- UIImage学习笔记
UIImage是什么 用来管理APP里的图片资源,可以用来表示设备支持的图片资源,不仅仅是jpg和png. UIImage是immutable的,因此也是线程安全的. iOS支持的所有的图片格式 链接 ...
- 二、spark入门之spark shell:文本中发现5个最常用的word
scala> val textFile = sc.textFile("/Users/admin/spark-1.5.1-bin-hadoop2.4/README.md") s ...
- Ubuntu16.04删除客人会话
1.按下 Ctrl+Alt+T - 打开终端 2.输入以下指令: sudo gedit /etc/lightdm/lightdm.conf 3.源代码之后添加如下代码,然后保存.关闭,重启电脑即可. ...
- memcache学习和分析
Memcached 特点• 具有非常快的处理速度• 缺乏认证以及安全管制,应将其放置在防火墙之后• 重启后数据全部丢失• 可以给数据设置有效期• 适合使用大量低CPU的机器搭建集群• 各节点之间各自独 ...
- <poj - 2139> Six Degrees of Cowvin Bacon 最短路径问题 the cow have been making movies
本题链接:http://poj.org/problem?id=2139 Description: The cows have been making movies lately, so the ...