BJFU 质数相关
1 /* 2 BJFU 质数相关 3 http://101.200.220.237/contest/19/problem/116/ 4 二分图 5 按质因数奇偶性建立二分图 6 * 7 * 8 */ 9 #include <cstdio> 10 #include <algorithm> 11 #include <cstring> 12 #include <cmath> 13 #include <vector> 14 #include <queue> 15 //#define test 16 using namespace std; 17 const int Nmax=500005; 18 int n; 19 int num[Nmax]; 20 int s1[Nmax]; 21 int s2[Nmax]; 22 int cnt1; 23 int cnt2; 24 int match[Nmax]; 25 int book[Nmax]; 26 int is_prime[Nmax]; 27 int prime[Nmax]; 28 int prime_cnt; 29 vector<int> v1[Nmax],v2[Nmax]; 30 int is(int n) 31 { 32 int ans=0; 33 for(int i=1;i<=prime_cnt;i++) 34 { 35 if(prime[i]>n) 36 break; 37 if(n%prime[i]==0) 38 { 39 while(n%prime[i]==0) 40 { 41 ans++; 42 n/=prime[i]; 43 } 44 } 45 } 46 47 //if(is_prime[n]) 48 //return 1; 49 //for(int i=2;i*i<=n;i++) 50 //{ 51 //while(n%i==0) 52 //{ 53 //ans++; 54 //n/=i; 55 //} 56 //} 57 return ans&1; 58 } 59 60 int dfs(int v) 61 { 62 for(int i=0;i<v1[v].size();i++) 63 { 64 int u=v1[v][i]; 65 if(book[u]) 66 continue; 67 book[u]=1; 68 if(match[u]==-1 || dfs(match[u])) 69 { 70 match[u]=v; 71 return 1; 72 } 73 } 74 return 0; 75 } 76 77 void init() 78 { 79 for(int i=1;i<=cnt1;i++) 80 v1[i].clear(); 81 for(int i=1;i<=cnt2;i++) 82 v2[i].clear(); 83 for(int i=1;i<=cnt1;i++) 84 { 85 for(int j=1;j<=cnt2;j++) 86 { 87 if(s1[i]%s2[j]==0 && is_prime[s1[i]/s2[j]]) 88 { 89 v1[i].push_back(j); 90 v2[j].push_back(i); 91 } 92 else if(s2[j]%s1[i]==0 && is_prime[s2[j]/s1[i]]) 93 { 94 v1[i].push_back(j); 95 v2[j].push_back(i); 96 } 97 } 98 } 99 for(int i=1;i<=cnt2;i++) 100 match[i]=-1; 101 } 102 103 void get_prime() 104 { 105 for(int i=2;i<Nmax;i++) 106 is_prime[i]=1; 107 for(int i=2;i<Nmax;i++) 108 if(is_prime[i]) 109 { 110 prime[++prime_cnt]=i; 111 for(int j=2;j*i<Nmax;j++) 112 is_prime[i*j]=0; 113 } 114 } 115 116 int main() 117 { 118 #ifdef test 119 freopen("6.test.in","r",stdin); 120 #endif 121 int t; 122 scanf("%d",&t); 123 get_prime(); 124 for(int ttt=1;ttt<=t;ttt++) 125 { 126 printf("Case #%d: ",ttt); 127 scanf("%d",&n); 128 cnt1=cnt2=0; 129 for(int i=1;i<=n;i++) 130 { 131 scanf("%d",&num[i]); 132 if(num[i]==1) 133 { 134 s2[++cnt2]=num[i]; 135 continue; 136 } 137 if(is(num[i])) 138 s1[++cnt1]=num[i]; 139 else 140 s2[++cnt2]=num[i]; 141 } 142 #ifdef tesst 143 for(int i=1;i<=cnt1;i++) 144 printf("%d ",s1[i]); 145 printf("\n"); 146 for(int j=1;j<=cnt2;j++) 147 printf("%d ",s2[j]); 148 printf("\n"); 149 #endif 150 init(); 151 int ans=0; 152 for(int i=1;i<=cnt1;i++) 153 { 154 for(int j=1;j<=cnt2;j++) 155 book[j]=0; 156 if(dfs(i)) 157 ans++; 158 } 159 printf("%d\n",n-ans); 160 } 161 return 0; 162 }
转载于:https://www.cnblogs.com/BBBob/p/6636352.html
BJFU 质数相关相关推荐
- 质数相关的算法 --Sieve of Eratosthenes算法 (埃拉托斯特尼)
质数相关的算法 --Sieve of Eratosthenes算法 (埃拉托斯特尼) 质数的定义 相关的算法(问题为求小于整数n的所有质数的数量) 暴力求解 Sieve of Eratosthenes ...
- 第四章 数学知识 质数相关
1.质数判定 1. 问题解释 所谓质数判定,就是给定一个数,判断一下该数是否为质数. 质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也 ...
- 【数论基础】质数相关基础算法
质数 什么是质数(素数) 质数就是一个大于1的整数,除了1和它本身以外,不能被其他自然数整除 注意:1.0不是质数 质数是从2开始的 一些简单的性质 质数x的约数只有1和x; 任何一个正整数,要么是质 ...
- C++——素数(质数)专题训练2
作者有话说:万变不离其宗,本篇共4题,解题方法有很多种,主要考察学生阅读质数相关的应用题对其理解程度是否准确,后续更新新的专题. 1.线性筛素数 [题目描述] 如题,给定一个范围 n,有 q 个询问, ...
- 改进张益唐证明,陶哲轩「他的证明比我还强」,这个天才青年还解决了困扰数学界近80年的「简单问题」...
鱼羊 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 传奇数学家张益唐之后,又有一位跟「孪生素数猜想」有关的数学家,摘下了「数论界最高奖」柯尔奖. 26岁时,他不仅将猜想中素数间隔的上限由 ...
- 那个14岁上大学、17岁读博、24岁当教授的天才神童,如今怎么样了?
陶哲轩最令人羡慕之处,不在于惊人的天赋和出色的成就,而在于坐拥这些天才和成就的同时,也能成长为一个享有健康生活的快乐的"普通人". 世界上最聪明的人是谁? 一些媒体报道可能会将这个 ...
- 那个14岁上大学、17岁读博、24岁成教授的天才神童,如今怎样了?
本文转自"精英说"(elitestalk) 世界上最聪明的人是谁?一些媒体报道可能会将这个答案引向一位华裔男性--陶哲轩. 据说,他被公认为"智商最高的人物", ...
- 那个 14 岁上大学、17 岁读博、24 岁当教授的天才神童,如今怎么样了?
陶哲轩最令人羡慕之处,不在于惊人的天赋和出色的成就,而在于坐拥这些天才和成就的同时,也能成长为一个享有健康生活的快乐的"普通人". >>>> 世界上最聪明的 ...
- 蓝桥杯大学本科B组考点整理
翻出考纲,查了csdn几个博客,然后根据之前做过的蓝桥题目,整理了下面的考点. 不保证全,但是希望对整体复习有帮助. 考纲和参考链接放在了最后. 新增:感谢cygg zggg xygg的补充 考点: ...
最新文章
- Python3.8.5最新版安装教程(含老版本卸载教程)
- 带头结点的线性表的链式实现
- 基于深度学习的特征提取和匹配
- 如何写出漂亮的代码:七个法则
- Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出
- 在一个list中增加一个节点
- Lynis 检测自身安全漏洞工具(本机)
- 计算机网络基础常考简答题,计算机网络基础知识简答题
- C++socket编程(六):6.1 设置socket的阻塞和非阻塞
- springboot执行批量插入_springboot+Mybatis 注解\Xml两种方式批量添加数据
- 线程安全与synchronized
- HTC vive开发
- 蚂蚁课堂视频笔记思维导图-4期 三、消息中间件
- linux qt socket编程视频教程,Qt视频教程第二十八集socket之UDP
- 人的思维谬误与心理学效应
- 微信小程序滑动验证拼图(有效果图)
- 如何利用网络技术赚钱的
- 怎么拍照识别植物?手把手教你识别
- 一个续写故事达到人类水平的AI,OpenAI大规模无监督语言模型GPT-2...
- introduce yourself in the Interview(面试英语自我介绍)
热门文章
- 实验3 --俄罗斯方块 with 20135335郝爽
- Andorid获取状态栏高度
- HashMap HashTable ConcurrentHashMap
- Safari支不支持HTML5录音? 现在浏览器中最好的解决方案是WebRTC下的 navigator.getUserMedia API。...
- 烂泥:mysql数据库使用的基本命令
- 拼接SQL的一个技巧
- C# 2.0对现有语法的改进
- java中list()和listfile()
- javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify
- 基本农田卫星地图查询_#重庆朝天门#谷歌百度腾讯高德“卫星地图”PK,谷歌更胜一筹...