http://acm.hdu.edu.cn/showproblem.php?pid=5072

题意:给出N个数,求有多少个三元组,满足三个数全部两两互质或全部两两不互质。

题解:

http://dtyfc.com/acm/980 我看的这个学会的……

可以先求不满足要求的三元组数量,也就是abc,a和b互质,b和c不互质。

这样就要找这n个数中,和某个数不互质的数的个数。

可以质因数分解+容斥原理,求出和某个数不互质的数的个数(也就是和这个数有相同因数的数的个数)。

还要先预处理以某个数x为因子的数的个数,cnt[x]。

具体看代码。

其实我也不是很熟,醉了。

不信你看这个博客都没有数论分类

代码:

 //#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
#include<ctime>
using namespace std;
#define mz(array) memset(array, 0, sizeof(array))
#define mf1(array) memset(array, -1, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(i=0;i<(n);i++)
#define FOR(i,x,n) for(i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("huzhi.txt","w",stdout)
#define mp make_pair
#define pb push_back
#define pf push_front
#define ppf pop_front
#define ppb pop_back
typedef long long ll;
typedef unsigned long long ull; const double pi=acos(-1.0);
const double eps=1e-; const int maxn=; int a[maxn];
int cnt[maxn];
int n; int b[maxn],bn; int att,me;
inline void attack(const int &now,const int &sum,const int &flag) {
if(now==bn) {
if(sum==)return;
// printf("sum=%d cnt[]=%d flag=%d\n",sum ,(cnt[sum]), flag);
att+=flag*(cnt[sum]);
return;
}
attack(now+,sum,flag);
attack(now+,sum*b[now],-flag);
} ll farm() {
int i,j,k;
mz(cnt);
FOR(i,,)
for(j=i; j<=; j+=i)
cnt[i]+=a[j];
ll sm=;
FOR(i,,) {
if(a[i]) {
int s=(int)sqrt((double)i);
int t=i;
bn=;
for(j=; j<=s && t>; j++){
if(t%j==){
b[bn++]=j;
while(t%j==)t/=j;
}
}
if(t>)b[bn++]=t;
att=;
me=i;
attack(,,-);
// REP(j,bn)printf("%d,",b[j]);
// printf("(i=%d , att= %d re+=%d)\n",i,att,max(0 , att-1) * (n-att));
sm+=(ll)max( , att-) * (n-att);
}
}
return (ll)n*(n-)*(n-)/ - sm/;
} int main() {
int T,i,x;
RD(T);
while(T--) {
RD(n);
mz(a);
REP(i,n) {
RD(x);
a[x]++;
}
printf("%I64d\n",farm());
}
return ;
}

hdu5072 Coprime (2014鞍山区域赛C题)(数论)的更多相关文章

  1. hdu5080:几何+polya计数(鞍山区域赛K题)

    /* 鞍山区域赛的K题..当时比赛都没来得及看(反正看了也不会) 学了polya定理之后就赶紧跑来补这个题.. 由于几何比较烂写了又丑又长的代码,还debug了很久.. 比较感动的是竟然1Y了.. * ...

  2. 2014鞍山现场赛C题HDU5072(素筛+容斥原理)

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

  3. hdu 5071(2014鞍山现场赛B题,大模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...

  4. hdu 5003 模拟水题 (2014鞍山网赛G题)

    你的一系列得分 先降序排列 再按0.95^(i-1)*ai 这个公式计算你的每一个得分 最后求和 Sample Input12530 478Sample Output984.1000000000 # ...

  5. hdu 5078(2014鞍山现场赛 I题)

    数据 表示每次到达某个位置的坐标和时间 计算出每对相邻点之间转移的速度(两点间距离距离/相隔时间) 输出最大值 Sample Input252 1 9//t x y3 7 25 9 06 6 37 6 ...

  6. ACM学习历程——ZOJ 3822 Domination (2014牡丹江区域赛 D题)(概率,数学递推)

    Description Edward is the headmaster of Marjar University. He is enthusiastic about chess and often ...

  7. ACM学习历程——ZOJ 3829 Known Notation (2014牡丹江区域赛K题)(策略,栈)

    Description Do you know reverse Polish notation (RPN)? It is a known notation in the area of mathema ...

  8. zoj 3822 Domination(2014牡丹江区域赛D题) (概率dp)

    3799567 2014-10-14 10:13:59                                                                     Acce ...

  9. hdu 5078 2014鞍山现场赛 水题

    http://acm.hdu.edu.cn/showproblem.php?pid=5078 现场最水的一道题 连排序都不用,由于说了ti<ti+1 //#pragma comment(link ...

随机推荐

  1. matlab实现hog特征

    %%matlab实现hog特征 %修改自http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html %input: img %outp ...

  2. springMVC配置步骤

    所用的工具为eclipse for javaEE,tomcat 8.0 1.导入jar包 把以上的jar包全部复制到项目的WebContent/WEB-INF/lib目录中 2.在webContent ...

  3. linux: shell常用指令归纳

    1.软件安装方式: 1)源码安装: ~ wget xxxxxx ~ ./configure ~ make ~ make install 2) yum: ~ yum search : 查找软件包 ~ y ...

  4. Queue 先进先出队列的操作

    1.Queue定义 System.Collections.Queue类表示对象的先进先出集合,存储在 Queue(队列) 中的对象在一端插入,从另一端移除. 2.优点 1.能对集合进行顺序处理(先进先 ...

  5. Mac 配置 vim

    Mac 配置 vim 安装 vim 7.4 cd ~ hg clone https://code.google.com/p/vim/ cd vim ./configure --with-feature ...

  6. Viewprot meta学习笔记

    viewprot屏幕尺寸,专为移动页面设计 参数 <meta name="viewport" content="height,width,initial-scale ...

  7. Xpath用法

    在进行网页抓取的时候,分析定位html节点是获取抓取信息的关键,目前我用的是lxml模块(用来分析XML文档结构的,当然也能分析html结构), 利用其lxml.html的xpath对html进行分析 ...

  8. 计算字符串高度 iOS

    公共类.h里 /** 返回自适应高度的文本 */ + (CGSize)sizeWithString:(NSString *)string font:(CGFloat)font maxWidth:(CG ...

  9. 第5.5次Scrum会议

    会议信息 时间:2016.10.25 21:30 时长:0.5h 地点:大运村1号公寓5楼楼道 类型:日常Scrum会议 会议内容 鉴于团队推进受阻,原PM 邓 与 原后端 冯 协商后决定之后一段时间 ...

  10. Linux 中 17 个 tar 命令实用示例

    Tar(Tape ARchive,磁带归档的缩写,LCTT 译注:最初设计用于将文件打包到磁带上,现在我们大都使用它来实现备份某个分区或者某些重要的目录)是类 Unix 系统中使用最广泛的命令,用于归 ...