HDU 5833 Zhu and 772002(高斯消元)

时间:2022-12-15 18:19:52

题意:给n个数,从n个数中抽取x(x>=1)个数,这x个数相乘为完全平方数,求一共有多少种取法,结果模1000000007。

思路:每个数可以拆成素数相乘的形式,例如:

 x1   2=2^1 * 3^0 * 5^0;

 x2   3=2^0 * 3^1 * 5^0;

 x3   4=2^2 * 3^0 * 5^0;

 x4   5=2^0 * 3^0 * 5^1;

 x5   6=2^1 * 3^1 * 5^0;

 x6   15=2^0 * 3^1 * 5^1;

用xi表示第i个数选或不选,xi的取值为0或1;因为相乘结果为完全平方数,所以最后的完全平方数表示成素数相乘的形式后,每个素数的幂一定是偶数,即模2等于0:

 2   (x1+2*x3+x5)%2=0

 3   (x2+x5+x6)%2=0

 5   (x4+x6)%2=0

将上面的式子转化为异或方程组,求解有m个*变量,每个*变量都可以取0或1,最终答案为2^m-1(去掉全0的情况);

#include <bits/stdc++.h>
using namespace std;
#define MAXN 2000
int prime[MAXN+];
int a[MAXN+][];
int free_num;
int free_x[MAXN];
int x[];
int equ,var;
const int mod=;
void getprime()
{
int i,j;
memset(prime,,sizeof(prime));
prime[]=prime[]=;
for(i=;i<=MAXN;i++)
{
if(prime[i])
prime[++prime[]]=i;
for(j=;j<=prime[]&&i*prime[j]<=MAXN;j++)
{
prime[i*prime[j]]=;
if(i%prime[j]==)
break;
}
}
}
void geta(int id,long long num)
{
int i;
i=;
while(num!=)
{
while(num%prime[i]==)
{
num/=prime[i];
a[i-][id]^=;
}
i++;
}
}
//返回值为-1表示无解,为0是唯一解,否则返回*变元个数
int Gauss()
{
int max_r, col, k;
free_num = ;
for(k = , col = ; k < equ && col < var; k++, col++)
{
max_r = k;
for(int i = k ; i < equ; i++)
if(abs(a[i][col]==)
{
max_r = i;
break;
}
if(a[max_r][col] == )
{
k--;
free_x[free_num++] = col; //*变元
continue;
}
if(max_r != k)
{
for(int j = col; j < var+; j++)
swap(a[k][j],a[max_r][j]);
}
for(int i = k+; i < equ;i++)
if(a[i][col] != )
for(int j = col; j < var+;j++)
a[i][j] ^= a[k][j];
}
for(int i = k;i < equ;i++)
if(a[i][col] != )
return -;
if(k < var)return var-k;
return ;
}
int main()
{
int ans;
int t;
int n;
int i;
int cas;
int freex;
long long num;
scanf("%d",&t);
getprime();
//printf("%d\n",prime[0]);
for(cas=;cas<=t;cas++)
{
memset(a,,sizeof(a));
scanf("%d",&n);
for(i=;i<n;i++)
{
scanf("%I64d",&num);
geta(i,num);
}
equ=prime[];
var=n;
freex=Gauss();
//printf("::%d\n",freex);
if(freex==-)
ans=;
else if(freex==)
ans=;
else
{
ans=;
for(i=;i<freex;i++)
{
ans=(*ans)%mod;
}
ans--;
}
printf("Case #%d:\n%d\n",cas,ans);
}
return ;
}

HDU 5833 Zhu and 772002(高斯消元)的更多相关文章

  1. hdu 5833 Zhu and 772002 高斯消元

    Zhu and 772002 Problem Description Zhu and 772002 are both good at math. One day, Zhu wants to test ...

  2. HDU - 5833&colon; Zhu and 772002 &lpar;高斯消元-*元&rpar;

    pro:给定N个数Xi(Xi<1e18),保证每个数的素因子小于2e3:问有多少种方案,选处一些数,使得数的乘积是完全平方数.求答案%1e9+7: N<300; sol:小于2e3的素数只 ...

  3. HDU 5833 Zhu and 772002

    HDU 5833 Zhu and 772002 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  4. hdu 5833 Zhu and 772002 ccpc网络赛 高斯消元法

    传送门:hdu 5833 Zhu and 772002 题意:给n个数,每个数的素数因子不大于2000,让你从其中选则大于等于1个数相乘之后的结果为完全平方数 思路: 小于等于2000的素数一共也只有 ...

  5. HDU 5833 Zhu and 772002 (高斯消元)

    Zhu and 772002 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5833 Description Zhu and 772002 are b ...

  6. HDU 5755 Gambler Bo(高斯消元)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5755 [题目大意] 一个n*m由0,1,2组成的矩阵,每次操作可以选取一个方格,使得它加上2之后对 ...

  7. HDU 4818 RP problem (高斯消元, 2013年长春区域赛F题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4818 深深地补一个坑~~~ 现场赛坑在这题了,TAT.... 今天把代码改了下,过掉了,TAT 很明显 ...

  8. ACM学习历程—HDU 3949 XOR(xor高斯消元)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3949 题目大意是给n个数,然后随便取几个数求xor和,求第k小的.(重复不计算) 首先想把所有xor的 ...

  9. 2014多校第一场J题 &vert;&vert; HDU 4870 Rating(DP &vert;&vert; 高斯消元)

    题目链接 题意 :小女孩注册了两个比赛的帐号,初始分值都为0,每做一次比赛如果排名在前两百名,rating涨50,否则降100,告诉你她每次比赛在前两百名的概率p,如果她每次做题都用两个账号中分数低的 ...

  10. HDU 3571 N-dimensional Sphere(高斯消元 数论题)

    这道题算是比较综合的了,要用到扩展欧几里得,乘法二分,高斯消元. 看了题解才做出来orz 基本思路是这样,建一个n*(n-1)的行列式,然后高斯消元. 关键就是在建行列式时会暴long long,所以 ...

随机推荐

  1. Redis基本信息

    1.Windows安装地址 https://github.com/MSOpenTech/redis/releases 2.命令行方式运行 执行redis-cli.exe 3.待续

  2. Jquery 的事件方法

    1.$(selector).bind(event,data,function,map) //给元素添加一个事件 2.当元素失去焦点时发生 blur 事件,获得焦点时触发focus事件: $(&quot ...

  3. Swift3&period;0&lowbar;注释&comma;警告&comma;todo的写法

    一. Swift3.0 不支持写Prama的注释了. 也不能打#warning了. 二. 取代方法 1. 注释: //MARK: - setter & getter 2.警告 //FIXME: ...

  4. 面向对象设计模式之TemplateMethod模板方法(行为型)

    动机:在软件构建过程中,对于某一项任务,他常常有稳定的整体操作结构,但各个子步骤却有很多改变的需求,或者由于固有的原因(比如框架与应用之间的关系)而无法和任务的整体结构同时实现:如何在确定稳定操作结构 ...

  5. jQuery中使用 &period;html&lpar;&rpar; function在IE8和9中显示不正常源码中多出sizset和sizcache

    错误原因:在引入jquery的时候,使用了html function,在IE8和IE9下面有可能会出现不兼容 解决办法:在html头部加一句 <meta http-equiv="X-U ...

  6. POJ 1422 Air Raid(二分图匹配最小路径覆盖)

    POJ 1422 Air Raid 题目链接 题意:给定一个有向图,在这个图上的某些点上放伞兵,能够使伞兵能够走到图上全部的点.且每一个点仅仅被一个伞兵走一次.问至少放多少伞兵 思路:二分图的最小路径 ...

  7. maven:pom&period;xml中没有dependency标签错误

    dependency的标签是包含在dependencies中的.

  8. jBPM学习之部署流程定义

    也许部署流程定义的方法有很多,这里选用的是用Java代码调用工作流引擎提供的部署服务API.在这之前,假设你的Eclipse已经安装好了GPD工作流画图工具,并且学会了画出最简单的HelloWorld ...

  9. 有关Java 锁原理

    锁 锁是用来锁东西的,让别人打不开也看不到!在线程中,用这个“锁”隐喻来说明一个线程在“操作”一个目标(如一个变量)的时候,如果变量是被锁住的,那么其他线程就对这个目标既“操作”不了(挂起)也无法看到 ...

  10. DHCP和TFTP服务

    DHCP服务 主要用途:用于内部网络和网络服务供应商自动分配IP地址给用户 用于内部网络管理员作为对所有电脑作集中管理的手段 使用场景:自动化安装系统 解决IPV4资源不足问题 DHCP共有八种报文: ...