1. /*
  2. 题意: 给出n个数(n<100000), 每个数都不大于100000,数字不会有重复。现在随意抽出3个,问三个彼此互质 或者 三个彼此不互质的数目有多少。
  3. 思路: 这道题反着想,就是三个数中只有一对互质 或者只有两对互质的个数。
  4. 研究后发现 对于每个数字求出与其不互质的个数k 那么 sum ( k*(n-1-k) )/2 就是相反的数目, 所以最终的答案就是 C(n,3) - sum ( k*(n-1-k) )/2.
  5. */
  6. #include <iostream>
  7. #include <cstdio>
  8. #include <cstring>
  9. using namespace std;
  10.  
  11. typedef __int64 LL;
  12. const int maxn=;
  13. int prime[maxn],flag[maxn],num;
  14. int numc[maxn*+],f[maxn*+];
  15. int factor[],fac;
  16. LL sum;
  17.  
  18. void getprimes()
  19. {
  20. memset(flag,,sizeof(flag));
  21. int i,j;num=;
  22. for(i=;i<maxn;i++)
  23. {
  24. if(flag[i]) prime[num++]=i;
  25. for(j=;j<num && prime[j]*i<maxn;j++)
  26. {
  27. flag[prime[j]*i]=;
  28. if(i%prime[j]==) break;
  29. }
  30. }
  31. }
  32.  
  33. void dfs1(int now,int s)//找出它所有的因子
  34. {
  35. if(now==fac)
  36. {
  37. numc[s]++;
  38. return ;
  39. }
  40. dfs1(now+,s);
  41. dfs1(now+,s*factor[now]);
  42. }
  43.  
  44. void dfs2(int id,int all,int now,int s )
  45. {
  46. if(now==all)
  47. {
  48. sum+=numc[s];
  49. return ;
  50. }
  51. if(id<fac)
  52. {
  53. dfs2(id+,all,now+,s*factor[id]);
  54. dfs2(id+,all,now,s);
  55. }
  56. }
  57.  
  58. void getfactors(int n)//分解质因子
  59. {
  60. int i;fac=;
  61. for(i=;i<num && prime[i]<=n;i++)
  62. {
  63. if(n%prime[i]==)
  64. {
  65. factor[fac++]=prime[i];
  66. while(n%prime[i]==) n/=prime[i];
  67. }
  68. }
  69. if(n>) factor[fac++]=n;
  70. }
  71.  
  72. int main()
  73. {
  74. getprimes();
  75. int t,n,i,j;
  76. scanf("%d",&t);
  77. while(t--)
  78. {
  79. scanf("%d",&n);
  80. memset(numc,,sizeof(numc));
  81. for(i=;i<=n;i++)
  82. {
  83. scanf("%d",f+i);
  84. getfactors(f[i]);
  85. dfs1(,);
  86. }
  87. LL ans=;
  88. for(i=;i<=n;i++)
  89. {
  90. getfactors(f[i]);
  91. LL ret=,temp=;
  92. for(j=;j<=fac;j++)//容斥原理找出与它不互质的个数
  93. {
  94. sum=;
  95. dfs2(,j,,);
  96. temp+=ret*sum;
  97. ret=-ret;
  98. }
  99. if(temp==) continue;//当f[i]==1时,所有数都与它不互质的是0个
  100. ans+=(temp-)*(n-temp);
  101. }
  102. printf("%I64d\n",(LL)n*(n-)*(n-)/-ans/);
  103. }
  104. return ;
  105. }

hdu 5072 计数+容斥原理的更多相关文章

  1. hdu 5072 Coprime 容斥原理

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...

  2. 集训队8月9日(组合计数+容斥原理+Mobius函数)

    刷题数:4 今天看了组合计数+容斥原理+Mobius函数,算法竞赛进阶指南169~179页 组合计数 https://www.cnblogs.com/2462478392Lee/p/11328938. ...

  3. HDU 5072 Coprime (单色三角形+容斥原理)

    题目链接:Coprime pid=5072"> 题面: Coprime Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: ...

  4. ACM学习历程—HDU 5072 Coprime(容斥原理)

    Description There are n people standing in a line. Each of them has a unique id number. Now the Ragn ...

  5. hdu 5072 Coprime(同色三角形+容斥)

    pid=5072">http://acm.hdu.edu.cn/showproblem.php?pid=5072 单色三角形模型 现场赛和队友想了3个小时,最后发现想跑偏了.感觉好可惜 ...

  6. hdu 5072 两两(不)互质个数逆向+容斥

    http://acm.hdu.edu.cn/showproblem.php?pid=5072 求n个不同的数(<=1e5)中有多少组三元组(a, b, c)两两不互质或者两两互质. 逆向求解,把 ...

  7. hdu 5072 Coprime

    http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出 n 个互不相同的数,求满足以下条件的三元无序组的个数:要么两两互质要么两两不互质. 思路:根据 ...

  8. HDU 2461 Rectangles#容斥原理

    http://acm.hdu.edu.cn/showproblem.php?pid=2461 题目很简单,但是由于询问数M可以很大,所以容易超时,这道题学到了在结构体里面写函数的方法,这样子效率更高, ...

  9. HDU 1695 GCD#容斥原理

    http://acm.hdu.edu.cn/showproblem.php?pid=1695 翻译题目:给五个数a,b,c,d,k,其中恒a=c=1,x∈[a,b],y∈[c,d],求有多少组(x,y ...

随机推荐

  1. float 浮动详解

    浮动(float):浮动原先设定时主要是用于文本环绕图像设定的,后来发现其在css布局中有很大的帮助,故渐渐使用浮动. 浮动后的元素脱离了文档的普通流,使得浮动的元素不占据文档的位置,其他元素可以覆盖 ...

  2. HTML+CSS : 笔记整理(2 常规流,BFC,固定定位,z-index)

    BFC和常规流的关系是什么:常规流遵循BFC,IFC规则. 定位规则总体来说三种: 常规流,浮动,绝对定位(CSS3里面新加了一种flex) 其中常规流包括BFC,IFC等规则,块级元素一个一排地从上 ...

  3. zookeeper的搭建方法

    1.创建三台虚拟机分别在虚拟机上安装Ubuntu16.04Server版的系统. 2.首先选择配置好第一台虚拟机,使用命令vim /etc/hosts对该文件进行修改 3.将zookeeper-3.4 ...

  4. HDU 3364 高斯消元

    Lanterns Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Su ...

  5. 13、python中的函数(闭包与装饰器)

    一.嵌套函数 函数的内部又再定义另一个函数,这个函数就叫嵌套函数,里面含函数就叫内部函数. 示例: 二.返回函数 函数可以接收函数对象作为参数,同理函数也能返回一个函数对象作为返回值. 示例: 返回函 ...

  6. python基础之生成器表达式形式、面向过程编程、内置函数部分

    生成器表达式形式 直接上代码 1 # yield的表达式形式 2 def foo(): 3 print('starting') 4 while True: 5 x=yield #默认返回为空,实际上为 ...

  7. python基础之生成器、三元表达式、列表生成式、生成器表达式

    生成器 生成器函数:函数体内包含有yield关键字,该函数执行的结果是生成器,生成器在本质上就是迭代器. def foo(): print('first------>') yield 1 pri ...

  8. html---Web Storage存储

    在HTML5中,除了Canvas元素之外,另一个新增的非常重要的功能是可以在客户端本地保存数据的Web Storage功能,之前可以使用Cookies在客户端保存如用户名等简单用户信息,但通过长期使用 ...

  9. GCD那些事儿

    GCD GCD,全名Grand Central Dispatch,中文名郭草地,是基于C语言的一套多线程开发API,一听名字就是个狠角色,也是目前苹果官方推荐的多线程开发方式.可以说是使用方便,又不失 ...

  10. Django笔记 —— MySQL安装

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...