HDU Coprime
Coprime
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 433 Accepted Submission(s): 192
Now the Ragnarok is coming. We should choose 3 people to defend the evil. As a group, the 3 people should be able to communicate. They are able to communicate if and only if their id numbers are pairwise coprime or pairwise not coprime. In other words, if their id numbers are a, b, c, then they can communicate if and only if [(a, b) = (b, c) = (a, c) = 1] or [(a, b) ≠ 1 and (a, c) ≠ 1 and (b, c) ≠ 1], where (x, y) denotes the greatest common divisor of x and y.
We want to know how many 3-people-groups can be chosen from the n people.
For each test case, the first line contains an integer n(3 ≤ n ≤ 105), denoting the number of people. The next line contains n distinct integers a1, a2, . . . , an(1 ≤ ai ≤ 105) separated by a single space, where ai stands for the id number of the i-th person.
5
1 3 9 10 2
题意:求n个数字中取出3个数字,统计 都互质 或 都不互质 的对数。
思路:取出的3个数字a,b,c 有8种情况。
其中题目要求的只是其中两种情况,还有6种情况,要么就是1对互质对,要么有2队互质对存在。
如果能求得 ai 在n个数字中 有 k 个数字与其不互质 k2个数字与其互质。
那么题目就能转化为求所有的 sum(k*k2);
对于数字ai来说,我们知道已经有一对互质对必然存在了,但是也可能会存在第2对,因为k个中和k2中。
所以,就相当于对ai来说,有至少一对互质对,最多2个互质对的情况。 统计所有。
我们会发现,会多算了一次,/2即可。
下面就是关于如何求ai 有多少个数字与ai互质的问题了。
容斥。
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<vector>
using namespace std;
const int maxn = 1e5+; int a[maxn];
bool s[maxn];
int prime[maxn],len;
vector<int>Q[maxn];
vector<int>X[maxn];
int Hash[maxn]; int H[maxn],hlen;
void init()
{
memset(s,false,sizeof(s));
s[]=true;
len = ;
for(int i=; i<maxn; i++)
{
if(s[i]==true)continue;
prime[++len]=i;
for(int j=i+i; j<maxn; j=j+i)
s[j] = true;
}
/**筛选i素因子**/
for(int i=; i<=len; i++)
{
for(int j=prime[i]; j<maxn; j=j+prime[i])
Q[j].push_back(prime[i]);
}
int k,tmp;
for(int i=; i<maxn; i++){
hlen = ;
H[]=-;
k = Q[i].size();
for(int j=; j<k; j++){
tmp = hlen;
for(int ss=; ss<=tmp; ss++){
H[++hlen]=-*H[ss]*Q[i][j];
X[i].push_back(H[hlen]);
}
}
}
}
int main()
{
int T,n,k;
init();
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
memset(Hash,,sizeof(Hash));
for(int i=; i<=n; i++)
{
scanf("%d",&a[i]);
k = X[a[i]].size();
for(int j=; j<k; j++)
if(X[a[i]][j]<)
Hash[-X[a[i]][j]]++;
else
Hash[X[a[i]][j]]++;
}
int sum;
__int64 tom = ;
for(int i=; i<=n; i++)
{
if(a[i]==) continue;
sum = ;
k = X[a[i]].size();
/**sum 与ai 不互质的个数**/
for(int j=; j<k; j++)
{
if(X[a[i]][j]<)
sum=sum-Hash[-X[a[i]][j]];
else sum=sum+Hash[X[a[i]][j]];
}
sum --; //减去本身
tom = tom + sum*(__int64)(n--sum);
}
printf("%I64d\n",(n*(__int64)(n-)*(n-))/-tom/);
}
return ;
}
HDU Coprime的更多相关文章
- 数学: HDU Co-prime
Co-prime Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Subm ...
- hdu Co-prime
题意:求出在一个区间[A,B]内与N互质的个数 . 思路: 先求出n的质因子,然后求出与N的质因子不互质的个数然后总个数减去就是.用位运算二进制表示那个因子用到过,实现容斥原理.在1到n之间是c倍数的 ...
- [容斥原理] hdu 4135 Co-prime
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4135 Co-prime Time Limit: 2000/1000 MS (Java/Others) ...
- 容斥 - HDU 4135 Co-prime
Co-prime Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=4135 推荐: 容斥原理 Mean: 给你一个区间[l,r]和一 ...
- HDU 5072 Coprime (单色三角形+容斥原理)
题目链接:Coprime pid=5072"> 题面: Coprime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...
- hdu 5072 Coprime 容斥原理
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...
- HDU 4135 Co-prime(容斥原理)
Co-prime 第一发容斥,感觉挺有意思的 →_→ [题目链接]Co-prime [题目类型]容斥 &题意: 求(a,b)区间内,与n互质的数的个数. \(a,b\leq 10^{15}\) ...
- hdu 5072 Coprime
http://acm.hdu.edu.cn/showproblem.php?pid=5072 题意:给出 n 个互不相同的数,求满足以下条件的三元无序组的个数:要么两两互质要么两两不互质. 思路:根据 ...
- hdu 5072 Coprime (容斥)
Problem Description There are n people standing in a line. Each of them has a unique id number. Now ...
随机推荐
- LDA 初见(JGibbLDA-v.1.0 eclipse使用)
参考:Eclipse下使用JGibbLDA使用总结 一.下载和初次使用JGibbLDA 1.导入JGibbLDA-v.1.0项目(参考上面链接) 2.在LDA.java右键“run”--->“r ...
- Python起步(2)
单行注释:#多行注释:'''或""" 一条语句写在一行之内,不需要分号分隔两条语句在同一行,中间分号隔开缩进语句块中只有一条语句,可以直接写在“:”之后使用“\”进行续行 ...
- FCM算法
FCM算法是一种基于划分的聚类算法,它的思想就是使得被划分到同一簇的对象之间相似度最大,而不同簇之间的相似度最小.模糊C均值算法是普通C均值算法的改进,普通C均值算法对于数据的划分是硬性的,而FCM则 ...
- 12.162s 1805.867s
[SQL]DROP PROCEDURE IF EXISTS truncate_insert_sales_rank_toparow_week; 受影响的行: 时间: .001s [SQL] CREATE ...
- mybatis 分页
http://www.cnblogs.com/xiaoxinwt/p/5329840.html
- ASP.NET 大文件上传
一 web.config 配置: 1). <system.webServer> <security> <requestFiltering> <!-- maxA ...
- iOS 横竖屏切换(应对特殊需求)
iOS 中横竖屏切换的功能,在开发iOS app中总能遇到.以前看过几次,感觉简单,但是没有敲过代码实现,最近又碰到了,demo尝试了几种情况,这里就做下总结.注意 横屏两种情况是反的你知道吗? UI ...
- SSH 登录VPS解决 The directory media/wysiwyg is not writable by server.问题
权限问题,去到 Magent根目录的Media文件夹,执行下面代码授权. chmod 777 wysiwyg
- 连接mysql问题 mysqlnd cannot connect to MySQL 4.1+ using old authentication
第一篇:PHP5.3开始使用MySqlND作为默认的MySql访问驱动,而且从这个版本开始将不再支持使用旧的用户接口链接Mysql了,你可能会看到类似的提示: #2000 - mysqlnd cann ...
- zabbix监控交换机
zabbix可以通过snmp协议监控交换机 前提: 交换机需要开启snmp协议,通过snmpwalk 可以抓取到数据就可以了 snmpwalk -v 2c -c public *.*.*.* 1.创建 ...