HDU5514 Frogs


题意:将\([0,m)\)所有符合\(a[i]*t ~mod~ m\)的值求和

做法:

  1. \(a[i]*t ~mod~ m\) 会在 \(gcd(a[i],m)\) 的倍数出现,因此问题等价与求:
    \[ \sum_{i=1}^{m-1} [ [(a[1],m)|i] or [(a[2],m)|i] or ... or [(a[n],m)|i] ] i \]
  2. 对于一个x,使得\(gcd(x,m)=g\),当存在一个\(gcd(a[i],m)|g\)时,则这个x就会被计入答案。
    那么就可以枚举\(g\)来计算贡献了
    \(gcd(i,m)=g\), 则\(gcd(i/g,m/g)=1\),那么对于一个\(g\)如果他存在一个\(gcd(a[i],m)|g\),贡献就是:
    \[ \sum_{i=1}^{m-1} [gcd(i/g,m/g)=1]i = \sum_{i=1}^{m/g} [gcd(i,m/g)=1]i*g \]
    又因为
    \[ \sum_{i=1}^{n}[gcd(i,n)=1]i = \frac{\varphi(n)*n}{2} \]
    证明:
    \[ \sum_{i=1}^{n}[gcd(i,n)=1]i + \sum_{i=1}^{n}[gcd(n-i,n)=1](n-i) \\ = \sum_{i=1}^n [gcd(i,n)=1]n = n\varphi(n)\\ \sum_{i=1}^{n}[gcd(i,n)=1]i = \frac{\varphi(n)*n}{2} \]
  3. 枚举m的约数g计算即可
#include <bits/stdc++.h>
typedef long long ll;
const int N = 1e4 + 7;
using namespace std;
int T,n;
ll m,a[N];//
//gcd(x,m) = g => gcd(x/g,m/g) = 1
//
//FOR : g|m
//    if FOR : gcd(a[i],m)|g
//        ans += {\sum [gcd(i/g,m/g) == 1]*i => \phi(m/g)*(m/g)/2*g => \phi(m/g)*m/2}
//
//hints:
//[gcd(i,n)==1] = [gcd(i,n-i)==1]
//\sum [gcd(i,n)==1]*i + \sum [gcd(n-i,n)==1]*(n-i) = n*\sum [gcd(i,n)==1] = n*phi(n)
//=> \sum [gcd(i,n)==1]*i = n*phi(n)/2ll b[1000007];
int cnt = 0;
int ck(ll g) {for(int i=0;i<n;++i) if(g%a[i]==0) return 1;return 0;
}
ll phi(ll x) {ll t = x;for(int i=2;i*i<=x;++i) if(x%i==0) {t-=t/i;while(x%i==0) x/=i;}if(x>1)t-=t/x;return t;
}
int main() {scanf("%d",&T);for(int ti=1;ti<=T;++ti) {scanf("%d%lld",&n,&m);int f = 0;for(int i=0;i<n;++i) {scanf("%lld",&a[i]);a[i] = __gcd(a[i],m);if(a[i]==1) f=1;}if(f) {printf("Case #%d: %lld\n",ti,(m-1)*m>>1LL);continue;}sort(a,a+n);n = unique(a,a+n) - a;cnt = 0;for(ll i=1;i*i<=m;++i) {if(m%i==0) {if(i*i == m) b[cnt++] = i;else {b[cnt++] = i;if(m/i!=1) b[cnt++] = m/i;}}}sort(b,b+cnt);cnt = unique(b,b+cnt) - b;ll ans = 0;for(int i=0;i<cnt;++i) {if(b[i]<m&&ck(b[i])) {ans+= phi(m/b[i]);}}ans*=m; ans/=2;printf("Case #%d: %lld\n",ti,ans);}return 0;
}

转载于:https://www.cnblogs.com/RRRR-wys/p/9689624.html

HDU5514 Frogs相关推荐

  1. HDU-5514 Frogs

    题目大意是给定一些(n)青蛙及其跳跃的步数和方法,给定一些石头,编号从1~m,问所有曾经被青蛙跳过的石头的编号的和. 思路 容斥定理 从题目中很容易得出每一个青蛙的跳过的石头编号是k * gcd(m, ...

  2. 信息学竞赛中的数学知识 --- 容斥原理

    C++基础数论-----容斥原理 C++基础数论-----容斥原理_C2020lax的博客-CSDN博客_容斥原理c++ C++数论容斥原理----无关的元素 C++数论容斥原理----无关的元素 - ...

  3. Frogs - HDU5514

    Frogs - HDU5514 icpc沈阳2015的题目. 容斥原理和数论的应用. 题目大意为给你一个数组 a[i]a[i]a[i](a[i]a[i]a[i] 即为第 iii 只青蛙的步长) 和若干 ...

  4. Frogs HDU - 5514

    Frogs HDU - 5514 题意: 有n个青蛙,第 i 个青蛙每次只能够跳 ai​步,现在有m个石头围成一圈,编号为0到m−1,现在青蛙可以围着这个石头组成的圆跳无限次,每跳一次就会占领这个石头 ...

  5. POJ 1659 Frogs#39; Neighborhood(度序列组成)

    意甲冠军  中国 依据Havel-Hakimi定理构图即可咯  先把顶点按度数从大到小排序  可图的话  度数大的顶点与它后面的度数个顶点相连肯定是满足的  出现了-1就说明不可图了 #include ...

  6. 【论文笔记】Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks

    Poison Frogs! Targeted Clean-Label Poisoning Attacks on Neural Networks 引言 创新性 本篇论文的贡献(目的) 算法步骤 实验结果 ...

  7. POJ1659 Frogs' Neighborhood(Havel定理)

    题目: Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9932   Accepted ...

  8. hdoj 5514 Frogs

    题目链接:Frogs 题目大意:有一个n个洞的圈,编号从0到m-1,然后有n只青蛙,起始为编号0,每次的步数是k步,问无限的时间后所有可以被青蛙访问的洞的编号 题目思路:我们可以很轻易的想到用gcd( ...

  9. codeforces 609F Frogs and mosquitoes 线段树+二分+multiset

    http://codeforces.com/problemset/problem/609/F There are n frogs sitting on the coordinate axis Ox. ...

最新文章

  1. java hashtable import,Hashtable的一个简单例子
  2. BW对于SAP SD模块有哪些作用
  3. Question for the 3D printing lattice?
  4. 【玩转cocos2d-x之三十八】如何使用NDK-STACK tool来恢复Cocos2d-x安卓错误堆栈信息
  5. macOSX中使用python matplotlib模块的问题解决
  6. VS2010常用快捷键自定义
  7. 重新学.Net[一]——.Net的组成
  8. 屠呦呦入选《时代周刊》100位最具影响力女性人物榜
  9. 如何手动实现C语言中的字符串操作
  10. LInux下centos6.7 设置字符集,解决乱码问题
  11. 启动tomcat控制台日志出现乱码怎么办?
  12. windows 搭建HTTP文件服务器(Nginx 方式)
  13. Java io流使用相对路径读取文件
  14. VennDiagram 画文氏图/维恩图/Venn
  15. win11硬盘分区如何合并 windows11硬盘分区合并的解决方法
  16. Vue一级路由与二级路由/路由重定向
  17. 保研/面试复习-数据结构与算法-万字总结(近三万字)
  18. Chrome插件开发--后台监控网页并自动刷新,点击页面元素
  19. 执行xpath时提示,需要命名空间管理器或XsltContext。此查询具有前缀、变量或用户定义的函数
  20. 超清西瓜视频真实视频地址获取方法

热门文章

  1. html位置下移像素点,吃透移动端 1px的具体用法
  2. c语言的程序灵魂是什么,C语言 第二章 程序的灵魂--算法
  3. [SpringBoot2]ajax函数中data参数的数据设置方式
  4. [数据结构]对称矩阵和三角矩阵压缩公式
  5. 十一届蓝桥杯国赛 本质上升序列-dp
  6. 高等数学上-赵立军-北京大学出版社-题解-练习2.7
  7. 给定一个n节点的二叉树,写出一个O(n)时间递归过程,将该树每个节点关键字输出(算法导论第十章10.4-2)
  8. 小 Q 与树(dsu on tree + segment tree)牛客练习赛 81 D
  9. 笔记,Vector类模板的基本功能
  10. F Christmas Game