hdu5072 Coprime (2014鞍山区域赛C题)(数论)
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题)(数论)的更多相关文章
- hdu5080:几何+polya计数(鞍山区域赛K题)
/* 鞍山区域赛的K题..当时比赛都没来得及看(反正看了也不会) 学了polya定理之后就赶紧跑来补这个题.. 由于几何比较烂写了又丑又长的代码,还debug了很久.. 比较感动的是竟然1Y了.. * ...
- 2014鞍山现场赛C题HDU5072(素筛+容斥原理)
Coprime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others) Total ...
- hdu 5071(2014鞍山现场赛B题,大模拟)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5071 思路:模拟题,没啥可说的,移动的时候需要注意top的变化. #include <iostr ...
- hdu 5003 模拟水题 (2014鞍山网赛G题)
你的一系列得分 先降序排列 再按0.95^(i-1)*ai 这个公式计算你的每一个得分 最后求和 Sample Input12530 478Sample Output984.1000000000 # ...
- hdu 5078(2014鞍山现场赛 I题)
数据 表示每次到达某个位置的坐标和时间 计算出每对相邻点之间转移的速度(两点间距离距离/相隔时间) 输出最大值 Sample Input252 1 9//t x y3 7 25 9 06 6 37 6 ...
- ACM学习历程——ZOJ 3822 Domination (2014牡丹江区域赛 D题)(概率,数学递推)
Description Edward is the headmaster of Marjar University. He is enthusiastic about chess and often ...
- 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 ...
- zoj 3822 Domination(2014牡丹江区域赛D题) (概率dp)
3799567 2014-10-14 10:13:59 Acce ...
- hdu 5078 2014鞍山现场赛 水题
http://acm.hdu.edu.cn/showproblem.php?pid=5078 现场最水的一道题 连排序都不用,由于说了ti<ti+1 //#pragma comment(link ...
随机推荐
- poj3696 快速幂的优化+欧拉函数+gcd的优化+互质
这题满满的黑科技orz 题意:给出L,要求求出最小的全部由8组成的数(eg: 8,88,888,8888,88888,.......),且这个数是L的倍数 sol:全部由8组成的数可以这样表示:((1 ...
- Oracle 查询今天、昨日、本周、本月和本季度的所有记录
Oracle 查询今日.昨日.本周.本月和本季度的所有记录 字段类型为date 今日 select * from 表名 where to_char(字段名,'dd')=to_char(sysdate, ...
- Math.Round四舍五入
Math.Round函数四舍五入的问题 今天客户跑过来跟我说,我们程序里面计算的价格不对,我检查了一下,发现价格是经过折算后的价格,结果是可能小数位较多,而单据上只能打印两位价格,所以就对价格调用 ...
- eclipse+SVN文件只显示版本号,不显示时间和作者解决办法
SVN默认是显示提交次数的 改成这样 就可以了...
- MVC5-6 帮助类
视图帮助类 HtmlHelper HtmlHelper给我们封装了大量的常用方法,使我们的开发更具高效.那么其中有哪里是我们常用的呢? BingForm 生成form表单 上图简单的使用了Html.B ...
- EF-CodeFirst-2玩的嗨
时间戳.复杂类型.GUID自增长 GUID自增长 GUID用于当主建那是好处多多,但是和int不同.EF不会自动识别第一个为类名+Id开头或int类型字段 去设置自增长.尴尬的GUID怎么玩呢.. D ...
- Win10 Theano Install Guide
basic install guide 1. download miniconda 2. conda install libpython mingw 3. conda install theano n ...
- Android中如何像 360 一样优雅的杀死后台Service而不启动
http://my.oschina.net/mopidick/blog/277813 目录[-] 一.已知的 kill 后台应用程序的方法 方法: kill -9 pid 二.终极方法,杀死后台ser ...
- jboss性能优化
jboss linux jboss 部署时优化设置: 在/conf/web.xml中通过参数指定: <session-config> <session-ti ...
- #第一用Markdown编辑器#
Markdown初次使用 This is a simple Markdown editor based on 'Markdown' it's * italic * style. it's also _ ...