1161 - Extreme GCD
| Time Limit: 1 second(s) | Memory Limit: 32 MB |
All of you know that GCD means the greatest common divisor. So, you must have thought that this problem requires finding some sort of GCD. Don't worry, you are absolutely right!
Given N positive integers, not necessarily distinct, how many ways you can take 4 integers from the N numbers such that their GCD is 1.
Input
Input starts with an integer T (≤ 20), denoting the number of test cases.
Each case starts with an integer N (4 ≤ N ≤ 10000). The next line contains N integers separated by spaces. The integers will be positive and not greater than 10000.
Output
For each case, print the case number and the number of ways you can take the integers as mentioned above.
Sample Input |
Output for Sample Input |
|
3 4 2 4 6 1 5 1 2 4 6 8 10 12 46 100 131 5 6 7 8 9 10 |
Case 1: 1 Case 2: 4 Case 3: 195 |
1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<string.h>
5 #include<queue>
6 #include<stack>
7 #include<map>
8 #include<math.h>
9 using namespace std;
10 typedef long long LL;
11 bool prime[10005]= {0};
12 int ans[10005];
13 int aa[10005];
14 int bt[10005];
15 int cc[10005]= {0};
16 bool dd[10005]= {0};
17 queue<int>que;
18 int main(void)
19 {
20 int i,j,k;
21 for(i=2; i<200; i++)
22 {
23 for(j=i; i*j<=10000; j++)
24 {
25 prime[i*j]=true;
26 }
27 }
28 int cnt=0;
29 for(i=2; i<=10000; i++)
30 {
31 if(!prime[i])
32 {
33 ans[cnt++]=i;
34 }
35 }int d;
36 cin>>d;int s;
37 for(s=1;s<=d;s++)
38 { cin>>k;
39 memset(bt,0,sizeof(bt));
40 for(i=0; i<k; i++)
41 {
42 scanf("%d",&aa[i]);
43 }
44 for(i=0; i<k; i++)
45 {
46 int nn=aa[i];
47 int t=0;
48 int flag=0;
49 while(nn>1)
50 {
51 if(flag==0&&nn%ans[t]==0)
52 {
53 flag=1;
54 que.push(ans[t]);
55 nn/=ans[t];
56 }
57 else if(nn%ans[t]==0)
58 {
59 nn/=ans[t];
60 flag=1;
61 }
62 else
63 {
64 flag=0;
65 t++;
66 }
67 }
68 if(nn>1)
69 {
70 que.push(nn);
71 }
72 int xx=0;
73 while(!que.empty())
74 {
75 cc[xx++]=que.front();
76 que.pop();
77 }
78 int x;
79 int y;
80 for(x=1; x<=(1<<xx)-1; x++)
81 {
82 int ak=1;
83 int vv=0;
84 for(j=0; j<xx; j++)
85 {
86 if(x&(1<<j))
87 {
88 vv++;
89 ak*=cc[j];
90 }
91 }
92 bt[ak]+=1;
93 if(vv%2)
94 dd[ak]=true;
95 }
96 }
97 LL sum=0;
98 LL sum1=0;
99 for(i=2; i<=10000; i++)
100 {
101 if(bt[i]>=4)
102 {
103 LL nn=(LL)bt[i]*(LL)(bt[i]-1)*(LL)(bt[i]-2)*(LL)(bt[i]-3)/24;
104 if(dd[i])
105 sum+=nn;
106 else sum-=nn;
107 }
108 }
109 sum1=(LL)k*(LL)(k-1)*(LL)(k-2)*(LL)(k-3)/24;
110 sum1-=sum;printf("Case %d: ",s);
111 printf("%lld\n",sum1);
112 }
113 return 0;
114 }
1161 - Extreme GCD的更多相关文章
- LightOJ 1161 - Extreme GCD 容斥
题意:给你n个数[4,10000],问在其中任意选四个其GCD值为1的情况有几种. 思路:GCD为1的情况很简单 即各个数没有相同的质因数,所以求所有出现过的质因数次数再容斥一下-- 很可惜是错的,因 ...
- spoj 3871. GCD Extreme 欧拉+积性函数
3871. GCD Extreme Problem code: GCDEX Given the value of N, you will have to find the value of G. Th ...
- UVA 11426 GCD - Extreme (II) (欧拉函数)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Problem JGCD Extreme (II)Input: Standard ...
- UVA 11426 - GCD - Extreme (II) (数论)
UVA 11426 - GCD - Extreme (II) 题目链接 题意:给定N.求∑i<=ni=1∑j<nj=1gcd(i,j)的值. 思路:lrj白书上的例题,设f(n) = gc ...
- 【UVa11426】GCD - Extreme (II)(莫比乌斯反演)
[UVa11426]GCD - Extreme (II)(莫比乌斯反演) 题面 Vjudge 题解 这.. 直接套路的莫比乌斯反演 我连式子都不想写了 默认推到这里把.. 然后把\(ans\)写一下 ...
- UVA11426 GCD - Extreme (II) (欧拉函数/莫比乌斯反演)
UVA11426 GCD - Extreme (II) 题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 10 100 200000 0 输出样例#1: 67 13 ...
- GCD - Extreme (II) for(i=1;i<N;i++) for(j=i+1;j<=N;j++) { G+=gcd(i,j); } 推导分析+欧拉函数
/** 题目:GCD - Extreme (II) 链接:https://vjudge.net/contest/154246#problem/O 题意: for(i=1;i<N;i++) for ...
- USACO GCD Extreme(II)
题目大意:求gcd(1,2)+gcd(1,3)+gcd(2,3)+...+gcd(n-1,n) ---------------------------------------------------- ...
- UVA 11424 GCD - Extreme (I) (欧拉函数+筛法)
题目:给出n,求gcd(1,2)+gcd(1,3)+gcd(2,3)+gcd(1,4)+gcd(2,4)+gcd(3,4)+...+gcd(1,n)+gcd(2,n)+...+gcd(n-1,n) 此 ...
随机推荐
- JAVA中null,"",equals,==相互之间使用详解
"equals" 与 "==" "equals"只是比较值是否相同 而"=="则是比较两个变量是不是同一个变量,也应时是 ...
- mysql数据查询语言DQL
DB(database)数据库:存储数据的'仓库',保存了一系列有组织的数据 DBMS(Database Management System)数据库管理系统:用于创建或管理DB SQL(Structu ...
- 转 Android Studio中Junit调试
转:https://blog.csdn.net/xanthus_li/article/details/54314189 在程序开发完成后,需要交给专业的调试人员进行相关的专业调试(白盒测试,黑盒测试, ...
- oracle 执行计划的获取方法
1.用explain plan for来获取执行计划 explain plan for <sql>; select * from table(dbms_xplan.display()); ...
- Copy constructor vs assignment operator in C++
Difficulty Level: Rookie Consider the following C++ program. 1 #include<iostream> 2 #include&l ...
- Ajax请求($.ajax()为例)中data属性传参数的形式
首先定义一个form表单: <form id="login" > <input name="user" type="text&quo ...
- ssm中的模糊查询
1.首先是数据层接口协议 public List<User> looks(String uname); 2.数据层实现 <select id="looks" re ...
- Linux进程操作
查看进程启动时间 ps -eo pid,lstart | grep PID 查看进程的运行多久 ps -eo pid,etime |grep PID 查看进程中启动了哪些线程 top -H -p pi ...
- Python连接MySQL数据库获取数据绘制柱状图
一.Python通过pymysql包获取MySQL数据库中的数据(没有对应包的可以通过pip install pymysql 安装对应的包) import matplotlib.pyplot as p ...
- <转>C/S架构分析
系统架构师-基础到企业应用架构-客户端/服务器 开篇 上篇,我们介绍了,单机软件的架构,其实不管什么软件系统,都是为了解决实际中的一些问题,软件上为了更好的解决实际的问题才会产生,那么对于单机软 件的 ...