/*
BJFU 质数相关
http://101.200.220.237/contest/19/problem/116/
二分图
按质因数奇偶性建立二分图
*
*
*/
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
#include <queue>
//#define test
using namespace std;
const int Nmax=;
int n;
int num[Nmax];
int s1[Nmax];
int s2[Nmax];
int cnt1;
int cnt2;
int match[Nmax];
int book[Nmax];
int is_prime[Nmax];
int prime[Nmax];
int prime_cnt;
vector<int> v1[Nmax],v2[Nmax];
int is(int n)
{
int ans=;
for(int i=;i<=prime_cnt;i++)
{
if(prime[i]>n)
break;
if(n%prime[i]==)
{
while(n%prime[i]==)
{
ans++;
n/=prime[i];
}
}
} //if(is_prime[n])
//return 1;
//for(int i=2;i*i<=n;i++)
//{
//while(n%i==0)
//{
//ans++;
//n/=i;
//}
//}
return ans&;
} int dfs(int v)
{
for(int i=;i<v1[v].size();i++)
{
int u=v1[v][i];
if(book[u])
continue;
book[u]=;
if(match[u]==- || dfs(match[u]))
{
match[u]=v;
return ;
}
}
return ;
} void init()
{
for(int i=;i<=cnt1;i++)
v1[i].clear();
for(int i=;i<=cnt2;i++)
v2[i].clear();
for(int i=;i<=cnt1;i++)
{
for(int j=;j<=cnt2;j++)
{
if(s1[i]%s2[j]== && is_prime[s1[i]/s2[j]])
{
v1[i].push_back(j);
v2[j].push_back(i);
}
else if(s2[j]%s1[i]== && is_prime[s2[j]/s1[i]])
{
v1[i].push_back(j);
v2[j].push_back(i);
}
}
}
for(int i=;i<=cnt2;i++)
match[i]=-;
} void get_prime()
{
for(int i=;i<Nmax;i++)
is_prime[i]=;
for(int i=;i<Nmax;i++)
if(is_prime[i])
{
prime[++prime_cnt]=i;
for(int j=;j*i<Nmax;j++)
is_prime[i*j]=;
}
} int main()
{
#ifdef test
freopen("6.test.in","r",stdin);
#endif
int t;
scanf("%d",&t);
get_prime();
for(int ttt=;ttt<=t;ttt++)
{
printf("Case #%d: ",ttt);
scanf("%d",&n);
cnt1=cnt2=;
for(int i=;i<=n;i++)
{
scanf("%d",&num[i]);
if(num[i]==)
{
s2[++cnt2]=num[i];
continue;
}
if(is(num[i]))
s1[++cnt1]=num[i];
else
s2[++cnt2]=num[i];
}
#ifdef tesst
for(int i=;i<=cnt1;i++)
printf("%d ",s1[i]);
printf("\n");
for(int j=;j<=cnt2;j++)
printf("%d ",s2[j]);
printf("\n");
#endif
init();
int ans=;
for(int i=;i<=cnt1;i++)
{
for(int j=;j<=cnt2;j++)
book[j]=;
if(dfs(i))
ans++;
}
printf("%d\n",n-ans);
}
return ;
}

BJFU 质数相关的更多相关文章

  1. [hihoCoder] #1158 : 质数相关

    时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 两个数a和 b (a<b)被称为质数相关,是指a × p = b,这里p是一个质数.一个集合S被称为质数相关,是指S中 ...

  2. 2015编程之美 初赛第一场C题 质数相关 二分图的最大匹配

    质数相关 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://hihocoder.com/contest/msbop2015round2a/prob ...

  3. HihoCoder 1158 : 质数相关 (最大独立集)

    质数相关 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 两个数a和 b (a<b)被称为质数相关,是指a × p = b,这里p是一个质数.一个集合S被称为质数相关 ...

  4. POJ中和质数相关的三个例题(POJ 2262、POJ 2739、POJ 3006)

    质数(prime number)又称素数,有无限个.一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数:否则称为合数.      最小的质数 ...

  5. Codeforces 548E Mike ans Foam (与质数相关的容斥多半会用到莫比乌斯函数)

    题面 链接:CF548E Description Mike is a bartender at Rico's bar. At Rico's, they put beer glasses in a sp ...

  6. 20160127.CCPP体系详解(0006天)

    程序片段(01):msg.c 内容概要:线程概念 #include <stdio.h> #include <stdlib.h> #include <Windows.h&g ...

  7. [2015编程之美] 第一场C

    题目3 : 质数相关 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 两个数a和 b (a<b)被称为质数相关,是指a × p = b,这里p是一个质数.一个集合S被 ...

  8. Noip数学整理

    目录 Noip数学整理 序 1 取模相关 2 质数相关 3.基本操作 4.方程相关 5.数列相关 6.函数相关 Noip数学整理 序 因为某些原因, Noip对于数学方面的考纲仅停留在比较小的一部分, ...

  9. Noip知识点备考

    作为一个oier,适当的整理是有必要的.蒟蒻根据自己的理解,筛选出考noip应当掌握的知识点.可能后期还有解题思路和模板,先挖个坑慢慢补呗. 60级张炳琪Noip知识点总结 可能是本人比较弱,写的内容 ...

随机推荐

  1. 链接提交-js代码推送进化版

    百度站长平台提供链接索引的自动提交JS脚本已经有一段时日了.用百度自己的话讲:JS链接推送代码以网页为最小对象,服务于全平台多终端,PC站和移动站均可使用.安装代码的页面在任意平台(浏览器.微信.微博 ...

  2. 安装多个版本号jdk后java -version不改变的问题解决

    1.问题 比方先安装了jdk7后,再安装jdk6,java -version就是显示java1.6,即使把JAVA_HOME和path改动为java7的路径,java -version依旧还是显示6. ...

  3. MySQL数据库管理(二)单机环境下MySQL Cluster的安装

    上文<MySQL数据库管理(一)MySQL Cluster集群简单介绍>对MySQL Cluster集群做了简要介绍.本文将教大家一步步搭建单机环境下的MySQL数据库集群. 一.单机环境 ...

  4. PHP设计模式之 单例模式 工厂模式 实例讲解

    单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素:1. 它们必须拥有一个构造函数,并且必须被标记为priva ...

  5. Linux系统的命令源码的获取方法

    我们知道,Linux是开源的,它自带的功能强大的命令也是开源的,也就是说.我们能够获得这些命令的源码并研究它.那到底怎样获得系统的命令的源码呢? 命令的源码是一个软件包为单元的,放在一个软件包的源码中 ...

  6. Android笔记之网络状态推断

    1.首先当然得在 manifest 中加入检查网络状态的权限: <uses-permission android:name="android.permission.ACCESS_NET ...

  7. java.util.ComparableTimSort中的sort()方法简单分析

    TimSort算法是一种起源于归并排序和插入排序的混合排序算法,设计初衷是为了在真实世界中的各种数据中能够有较好的性能. 该算法最初是由Tim Peters于2002年在Python语言中提出的. T ...

  8. spring属性的三种注入方法

    (1)使用set方法: public class Book {  private String bookname;public void setBookname(String bookname) {  ...

  9. Linux Shell Scripting Cookbook 读书笔记 4

    正则, grep 1. 正则表达式  正则表达式  描述  示例 ^ 行起始标记  ^hell匹配以hell开头的行 $ 行尾标记  test$匹配以test结尾的行 . 匹配任意一个字符  hell ...

  10. Laravel-查询作用域

    Laravel-查询作用域 标签(空格分隔): php, laravel 全局作用域 ## 编写全局作用域 ## 编写全局作用域很简单.定义一个实现 Illuminate\Database\Eloqu ...