Sky Code(poj3904)
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 2085 | Accepted: 665 |
Description
Input
Output
Sample Input
4
2 3 4 5
4
2 4 6 8
7
2 3 4 5 7 6 8
Sample Output
1
0
34
思路:容斥原理;
由于给的数据范围是10000;所以我们先打表10000以内的素数;
然后我们分解每一个数;求出它的各个不同的质因数,然后暴力组合每个数的质因数,在bt数组里记录个数,也就是bt[i],i这个数可以被前面的哪些数整除
最后从1循环到10000,容斥一遍就可以得到不合要求的个数,最后总的减去就行。
由于每个数不过10000,他的质因数不会超过8个,那么复杂度为(n*28);
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 }
36 while(scanf("%d",&k)!=EOF)
37 {
38 memset(bt,0,sizeof(bt));
39 for(i=0; i<k; i++)
40 {
41 scanf("%d",&aa[i]);
42 }
43 for(i=0; i<k; i++)
44 {
45 int nn=aa[i];
46 int t=0;
47 int flag=0;
48 while(nn>1)
49 {
50 if(flag==0&&nn%ans[t]==0)
51 {
52 flag=1;
53 que.push(ans[t]);
54 nn/=ans[t];
55 }
56 else if(nn%ans[t]==0)
57 {
58 nn/=ans[t];
59 flag=1;
60 }
61 else
62 {
63 flag=0;
64 t++;
65 }
66 }
67 if(nn>1)
68 {
69 que.push(nn);
70 }
71 int xx=0;
72 while(!que.empty())
73 {
74 cc[xx++]=que.front();
75 que.pop();
76 }
77 int x;
78 int y;
79 for(x=1; x<=(1<<xx)-1; x++)
80 {
81 int ak=1;
82 int vv=0;
83 for(j=0; j<xx; j++)
84 {
85 if(x&(1<<j))
86 {
87 vv++;
88 ak*=cc[j];
89 }
90 }
91 bt[ak]+=1;
92 if(vv%2)
93 dd[ak]=true;
94 }
95 }
96 LL sum=0;
97 LL sum1=0;
98 for(i=2; i<=10000; i++)
99 {
100 if(bt[i]>=4)
101 {
102 LL nn=(LL)bt[i]*(LL)(bt[i]-1)*(LL)(bt[i]-2)*(LL)(bt[i]-3)/24;
103 if(dd[i])
104 sum+=nn;
105 else sum-=nn;
106 }
107 }
108 sum1=(LL)k*(LL)(k-1)*(LL)(k-2)*(LL)(k-3)/24;
109 sum1-=sum;
110 printf("%lld\n",sum1);
111 }
112 return 0;
113 }
Sky Code(poj3904)的更多相关文章
- POJ3904 Sky Code
题意 Language:Default Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3980 Accepte ...
- poj3904 Sky Code —— 唯一分解定理 + 容斥原理 + 组合
题目链接:http://poj.org/problem?id=3904 Sky Code Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- POJ 3904 Sky Code (容斥原理)
B - Sky Code Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- POJ Sky Code 莫比乌斯反演
N. Sky Code Time Limit: 1000ms Case Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO for ...
- POJ3094 Sky Code(莫比乌斯反演)
POJ3094 Sky Code(莫比乌斯反演) Sky Code 题意 给你\(n\le 10^5\)个数,这些数\(\le 10^5\),问这些这些数组成的互不相同的无序四元组(a,b,c,d)使 ...
- Sky Code
Sky Code 给出n个数,求选出4个数组合,使其gcd为1,,\(n<=10000\),每个数\(<=10000\). 解 理解1:容斥原理 注意到Mobius反演式子不好写出,于是我 ...
- POJ3904 Sky Code【容斥原理】
题目链接: http://poj.org/problem?id=3904 题目大意: 给你N个整数.从这N个数中选择4个数,使得这四个数的公约数为1.求满足条件的 四元组个数. 解题思路: 四个数的公 ...
- POJ 3904 Sky Code
题意:给定n个数ai, ai <= 10000, n <= 10000, 从中选出4个数要求gcd为1,这样的集合有多少个? 分析:首先总共集合nCr(n, 4) = n*(n-1)*(n ...
- POJ 3904 JZYZOJ 1202 Sky Code 莫比乌斯反演 组合数
http://poj.org/problem?id=3904 题意:给一些数,求在这些数中找出四个数互质的方案数. 莫比乌斯反演的式子有两种形式http://blog.csdn.net/out ...
随机推荐
- MongoDB的搭建、参数
Mongodb官网:https://www.mongodb.com/ mkdir -r /data/db touch /data/log tar -zxvf mongodb-linux-x86_6 ...
- 大数据学习day29-----spark09-------1. 练习: 统计店铺按月份的销售额和累计到该月的总销售额(SQL, DSL,RDD) 2. 分组topN的实现(row_number(), rank(), dense_rank()方法的区别)3. spark自定义函数-UDF
1. 练习 数据: (1)需求1:统计有过连续3天以上销售的店铺有哪些,并且计算出连续三天以上的销售额 第一步:将每天的金额求和(同一天可能会有多个订单) SELECT sid,dt,SUM(mone ...
- 强化学习实战 | 表格型Q-Learning玩井字棋(二)
在 强化学习实战 | 表格型Q-Learning玩井字棋(一)中,我们构建了以Game() 和 Agent() 类为基础的框架,本篇我们要让agent不断对弈,维护Q表格,提升棋力.那么我们先来盘算一 ...
- 一起手写吧!Promise!
1.Promise 的声明 首先呢,promise肯定是一个类,我们就用class来声明. 由于new Promise((resolve, reject)=>{}),所以传入一个参数(函数),秘 ...
- pyqt5的下拉菜单,可以进行输入文字
- 内存中 1k 代表什么
1K也就是 1KB == 1000 bytes == 1000 *8 位 通常一个地址里面有8位,就是说一个房间里面能存8个0或者1
- 【Spring Framework】Spring入门教程(四)注册Bean到IOC容器
注册Bean到IOC容器大致分为4种: ①.包扫描+组件注解(@Controller.@Service.@Repository.@Component) 针对类是我们自己编写的情况 ②.@Bean注解 ...
- 【Java 8】Stream中flatMap方法
在java 8 Stream中,flatMap方法是一个维度升降的方法 举例说明 给 定 单 词 列 表["Hello","World"] ,要返回列表 [&q ...
- 【Spark】【RDD】从内存(集合)创建RDD
val list = List(1,2,3) var rdd = sc.parallelize(list) rdd.partitions.size 通过调用SparkContext的paralleli ...
- AD设置过孔盖油
设置所有的过孔盖油 ==> 先选中一个过孔,然后根据对象类型查找相似器件,选中所有的过孔,然后勾选过孔盖油选项即可. 上述这种方法不是太好,每次修改完PCB后都要确认下新增的过孔是否已经过孔盖油 ...