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 质数相关相关推荐

  1. 质数相关的算法 --Sieve of Eratosthenes算法 (埃拉托斯特尼)

    质数相关的算法 --Sieve of Eratosthenes算法 (埃拉托斯特尼) 质数的定义 相关的算法(问题为求小于整数n的所有质数的数量) 暴力求解 Sieve of Eratosthenes ...

  2. 第四章 数学知识 质数相关

    1.质数判定 1. 问题解释 所谓质数判定,就是给定一个数,判断一下该数是否为质数. 质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也 ...

  3. 【数论基础】质数相关基础算法

    质数 什么是质数(素数) 质数就是一个大于1的整数,除了1和它本身以外,不能被其他自然数整除 注意:1.0不是质数 质数是从2开始的 一些简单的性质 质数x的约数只有1和x; 任何一个正整数,要么是质 ...

  4. C++——素数(质数)专题训练2

    作者有话说:万变不离其宗,本篇共4题,解题方法有很多种,主要考察学生阅读质数相关的应用题对其理解程度是否准确,后续更新新的专题. 1.线性筛素数 [题目描述] 如题,给定一个范围 n,有 q 个询问, ...

  5. 改进张益唐证明,陶哲轩「他的证明比我还强」,这个天才青年还解决了困扰数学界近80年的「简单问题」...

    鱼羊 萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 传奇数学家张益唐之后,又有一位跟「孪生素数猜想」有关的数学家,摘下了「数论界最高奖」柯尔奖. 26岁时,他不仅将猜想中素数间隔的上限由 ...

  6. 那个14岁上大学、17岁读博、24岁当教授的天才神童,如今怎么样了?

    陶哲轩最令人羡慕之处,不在于惊人的天赋和出色的成就,而在于坐拥这些天才和成就的同时,也能成长为一个享有健康生活的快乐的"普通人". 世界上最聪明的人是谁? 一些媒体报道可能会将这个 ...

  7. 那个14岁上大学、17岁读博、24岁成教授的天才神童,如今怎样了?

    本文转自"精英说"(elitestalk) 世界上最聪明的人是谁?一些媒体报道可能会将这个答案引向一位华裔男性--陶哲轩. 据说,他被公认为"智商最高的人物", ...

  8. 那个 14 岁上大学、17 岁读博、24 岁当教授的天才神童,如今怎么样了?

    陶哲轩最令人羡慕之处,不在于惊人的天赋和出色的成就,而在于坐拥这些天才和成就的同时,也能成长为一个享有健康生活的快乐的"普通人". >>>> 世界上最聪明的 ...

  9. 蓝桥杯大学本科B组考点整理

    翻出考纲,查了csdn几个博客,然后根据之前做过的蓝桥题目,整理了下面的考点. 不保证全,但是希望对整体复习有帮助. 考纲和参考链接放在了最后. 新增:感谢cygg zggg xygg的补充 考点: ...

最新文章

  1. Python3.8.5最新版安装教程(含老版本卸载教程)
  2. 带头结点的线性表的链式实现
  3. 基于深度学习的特征提取和匹配
  4. 如何写出漂亮的代码:七个法则
  5. Java黑皮书课后题第10章:*10.10(Queue类)10.6节给出一个Stock类。设计一个名为Queue的类用于存储整数。像栈一样,队列保存元素。在栈中,元素后进先出。队列中元素先进先出
  6. 在一个list中增加一个节点
  7. Lynis 检测自身安全漏洞工具(本机)
  8. 计算机网络基础常考简答题,计算机网络基础知识简答题
  9. C++socket编程(六):6.1 设置socket的阻塞和非阻塞
  10. springboot执行批量插入_springboot+Mybatis 注解\Xml两种方式批量添加数据
  11. 线程安全与synchronized
  12. HTC vive开发
  13. 蚂蚁课堂视频笔记思维导图-4期 三、消息中间件
  14. linux qt socket编程视频教程,Qt视频教程第二十八集socket之UDP
  15. 人的思维谬误与心理学效应
  16. 微信小程序滑动验证拼图(有效果图)
  17. 如何利用网络技术赚钱的
  18. 怎么拍照识别植物?手把手教你识别
  19. 一个续写故事达到人类水平的AI,OpenAI大规模无监督语言模型GPT-2...
  20. introduce yourself in the Interview(面试英语自我介绍)

热门文章

  1. 实验3 --俄罗斯方块 with 20135335郝爽
  2. Andorid获取状态栏高度
  3. HashMap HashTable ConcurrentHashMap
  4. Safari支不支持HTML5录音? 现在浏览器中最好的解决方案是WebRTC下的 navigator.getUserMedia API。...
  5. 烂泥:mysql数据库使用的基本命令
  6. 拼接SQL的一个技巧
  7. C# 2.0对现有语法的改进
  8. java中list()和listfile()
  9. javax.net.ssl.SSLException MESSAGE: closing inbound before receiving peer‘s close_notify
  10. 基本农田卫星地图查询_#重庆朝天门#谷歌百度腾讯高德“卫星地图”PK,谷歌更胜一筹...