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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468990.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker系列第04部分:查看容器+创建容器+启动容器+文件挂载+删除容器

1 容器的创建和启动 1.1 虚拟机的生命周期 1.2 容器的生命周期 2、容器操作 2.1 查看容器 查看正在运行容器&#xff1a; docker ps 查看所有的容器&#xff08;启动过的历史容器&#xff09; docker ps –a 查看最后一次运行的容器&#xff1a; docker ps -l 查看停止的容…

嵌入式软件面试(基础题)总结,不断更新

C/C/各种基础啊 1. static有什么用途&#xff1f;&#xff08;请至少说明两种&#xff09; 1.限制变量的作用域 2.设置变量的存储域 2. 引用与指针有什么区别&#xff1f; 1) 引用必须被初始化&#xff0c;指针不必。 2) 引用初始化以后不能被改变&#xff0c;指针可以改…

java程序设计及实践实践代码_杭+新闻:姚争为老师把程序设计讲“活”了,满是代码的枯燥课程被学生“秒杀”...

通讯员 陈鑫 杨鹏飞记者 方秀芬作为专业选修课&#xff0c;Java程序设计和Web程序设计&#xff0c;这两门满是代码的课程&#xff0c;看似很枯燥&#xff0c;但在杭师大信息科学与工程学院却爆红&#xff0c;每学期都遭“秒杀”&#xff0c;以前线下课&#xff0c;提前20分钟准…

Docker系列第05部分:实战部署应用全流程

1 MySQL部署 1.1拉取MySQL镜像 docker pull mysql 查看镜像&#xff1a; 1.2创建MySQL容器 docker run -di --namepinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD123456 mysql:5.7 # -p 代表端口映射&#xff0c;格式为 宿主机映射端口:容器运行端口 # -e 代表添加…

SQL-ALTER-change和modify区别

ALTER 对于列的应用&#xff1a;1.更改列名格式&#xff1a;CHANGE old_col_name new_col_name column_definition保留old和new列名列名&#xff1a;a ---->b 列类型ALTER TABLE t1 CHANGE a b INTEGER;2.更改列类型&#xff0c;不改列名保留old和new的列名&#xff0c;即使…

Vim安装插件在命令行下看代码

这几天我又想抛弃source insight 了&#xff0c;主要是太慢了 安装如下 VIM万能插件 或者使用 sudo apt-get installexuberant-ctags 安装 我主要是使用函数跳转功能&#xff0c;需要记住几个指令 1、生成tags用来实现函数跳转 这样会生成一个tags文件&#xff0c;作为跳…

Docker系列第06部分:备份与迁移+dockerfile

1 备份与迁移 1.1 容器保存为镜像 docker commit pinyougou_nginx mynginx# pinyougou_nginx是容器名称 # mynginx是新的镜像名称 # 此镜像的内容就是你当前容器的内容&#xff0c;接下来你可以用此镜像再次运行新的容器1.2 镜像备份 docker save -o mynginx.tar mynginx #…

流浪地球开机动画包zip_影视日报|合家欢动画电影quot;许愿神龙quot;定档1.15;流浪地球加长版定档11.26...

1、合家欢动画电影"许愿神龙"定档1.15动画电影《许愿神龙》正式定档2021年1月15日&#xff0c;并发布定档海报。2、白客等万万兄弟助力易小星"沐浴之王"由易小星执导&#xff0c;彭昱畅、乔杉领衔主演&#xff0c;卜冠今、苇青主演&#xff0c;金世佳友情出…

Git 分布式版本控制工具01:Git介绍+下载+安装

1. 前言 1.1 什么是Git Git 是一个分布式版本控制工具&#xff0c;通过Git 仓库来存储和管理源代码文件文件。 在IDEA开发工具中可以集成Git&#xff1a; 集成后在IDEA中可以看到Git相关图标&#xff1a; 可以通过启动两个IDEA窗口模拟两个开发人员来展示Git的使用&#xf…

无法解析的外部符号,无法解析的外部命令

1.这个是因为有相关的lib包没有被引用进去 解决办法&#xff1a; 1. 2. 转载于:https://www.cnblogs.com/hcfan/p/6638980.html

Android Adb 源码分析

扭起屁股得意洋洋 最近&#xff0c;我负责的项目因为临近量产&#xff0c;把之前的userdebug版本关闭&#xff0c;转成了user版本&#xff0c;增加selinux的权限&#xff0c;大家都洋溢在项目准备量产的兴奋和喜悦之中不能自拔 谁知&#xff0c;好景不长&#xff0c;user版本…

kvm虚拟化_KVM 虚拟化环境搭建 - WebVirtMgr

前文《KVM 虚拟化环境搭建 - ProxmoxVE》已经给大家介绍了开箱即用的 PVE 系统&#xff0c;PVE 是方便&#xff0c;但还是有几点问题&#xff1a;第一&#xff1a;始终是商用软件&#xff0c;虽然可以免费用&#xff0c;但未来版本还免费么&#xff1f;商用的法律风险呢&#x…

Git 分布式版本控制工具02:Git代码托管服务列表与使用

1常用的Git代码托管服务 Git中存在两种类型的仓库&#xff0c;即本地仓库和远程仓库。 Git远程仓库中比较常用的有GitHub、码云、GitLab等。 名称网址说明gitHubGitHub: Where the world builds software GitHub一个面向开源及私有软件项目的托管平台&#xff0c;因为只支持…

Android系统root破解原理分析

上一篇文章 Android adb 源码分析 理论基础 root破解过程的终极目标是替换掉系统中的su程序。但是要想替换掉系统中su程序本身就是需要root权限的&#xff0c;怎样在root破解过程中获得root权限&#xff0c;成为我们研究的重点了。下面我们先清点一下我们需要破解系统情况&a…

常见字母缩写

1、ODBC&#xff1a;Open Database Connectivity&#xff0c;开放数据库连接&#xff1b; 2、TCP&#xff1a;Transport Control Protocol&#xff0c;传输控制协议&#xff1b; 3、URL&#xff1a;统一资源定位器&#xff1b; 4、HTTP&#xff1a;Hypertext Transfer Protoco…

基于Springboot外卖系统19:用户地址+默认收货地址

1. 用户地址簿功能 1.1 需求分析 地址簿&#xff0c;指的是移动端消费者用户的地址信息&#xff0c;用户登录成功后可以维护自己的地址信息。 同一个用户可以有多个地址信息&#xff0c;但是只能有一个默认地址。 对于地址簿管理&#xff0c;我们需要实现以下几个功能&#…

python获取返回值_python 调用 shell ,获取返回值和返回信息

网络上有各种方案解决python调用shell的解决方案&#xff0c;但是没有一个完美的&#xff0c;以下是本人整理的一个方案&#xff0c;比较完美地解决了同时解决获取返回值和返回信息。 def run_linux_cmd_quiet(i_cmd, i_nohup0): l_func_name__name__ . sys._getframe().f_cod…

基于Springboot外卖系统20:前端菜品展示+菜品数量查询

1 菜品展示 1.1 需求分析 用户登录成功后跳转到系统首页&#xff0c;在首页需要根据分类来展示菜品和套餐。如果菜品设置了口味信息&#xff0c;需要展示 按钮&#xff0c;否则显示按钮。 1.2 前端页面分析 在开发代码之前&#xff0c;需要梳理一下前端页面和服务端的交互过…

python 播放声音_如何用Python播放声音?

对于Windows&#xff0c;可以使用winsound。它内置import winsound winsound.PlaySound(sound.wav, winsound.SND_FILENAME) 应该能够在Linux上使用ossaudodev&#xff1a;from wave import open as waveOpen from ossaudiodev import open as ossOpen s waveOpen(tada.wav,rb…