SGU 200.Cracking RSA(高斯消元)
时间限制:0.25s
空间限制:4M
题意:
给出了m(<100)个数,这m个数的质因子都是前t(<100)个质数构成的。
问有多少个这m个数的子集,使得他们的乘积是完全平方数。
Solution:
要使乘积为完全平方数,那么对于乘积的每个质因子的个数要为偶数。
可以先打出前100个质数,来看第i个质数Pi,对于第j个数Kj,如果它含有奇数个质数Pi,那么矩阵A[i][j]的值为1,显然增广矩阵的值应该全为0.
这样就构造出了一个n*m的xor方程组.
利用高斯消元求出变元的个数power
那么答案就是(2^power)-1
wa了几次竟然是因为高精度写错了,真是醉了...
code
/*
解异或方程组
*/
#include <iostream>
#include <vector>
using namespace std;
const int MAXN = ; int prim[MAXN];
vector<int> A[MAXN]; int Gauss (int n, int m) {
int col = , row = , tem, k = ;
for (; col <= m && row <= n; ++col) {
for (tem = ++row; tem <= n && A[tem][col] == ; ++tem);
if (tem > n) {
row--;
continue;
}
if (tem != row) swap (A[tem], A[row]);
for (int i = row + ; i <= n; ++i) {
if (A[i][col])
for (int j = col; j <= m; ++j)
A[i][j] ^= A[row][j];
}
}
return m - row;
}
void init() {
bool vis[] = {};
for (int i = , tol = ; i <= ; ++i)
if (!vis[i]) {
prim[++tol] = i;
for (int j = i; j <= ; j += i)
vis[j] = ;
}
}
int n, m;
void output (int x) {
if (x <= ) {
cout << << endl;
return;
}
int C[] = {}, len = ;
for (int i = ; i <= x; ++i) {
for (int j = ; j <= len; ++j)
C[j] <<= ;
C[]++;
for (int t = ; t <= len ; t++)
if (C[t] >= ) {
C[t + ] += C[t] / ;
C[t] %= ;
if (t + > len) len++;
}
}
for (int i = len; i > ; --i)
cout << C[i];
} int main() {
ios::sync_with_stdio ();
init();
cin >> n >> m;
for (int i = ; i < MAXN; i++) A[i].resize (MAXN);
for (int i = , x; i <= m; ++i) {
cin >> x;
for (int j = ; j <= n; ++j)
for (; x % prim[j] == ; x /= prim[j]) A[j][i] ^= ;
}
int power = Gauss (n, m);
output (power);
}
SGU 200.Cracking RSA(高斯消元)的更多相关文章
- SGU 200. Cracking RSA(高斯消元+高精度)
标题效果:鉴于m整数,之前存在的所有因素t素数.问:有多少子集.他们的产品是数量的平方. 解题思路: 全然平方数就是要求每一个质因子的指数是偶数次. 对每一个质因子建立一个方程. 变成模2的线性方程组 ...
- Acdream1217 Cracking' RSA(高斯消元)
题意:给你m个数(m<=100),每个数的素因子仅来自于前t(t<=100)个素数,问这m个数的非空子集里,满足子集里的数的积为完全平方数的有多少个. 一开始就想进去里典型的dp世界观里, ...
- SGU 200 Cracking RSA (高斯消元)
转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents by---cxlove 题意:给出m个整理,因子全部为前t个素数.问有多少 ...
- SGU 200. Cracking RSA (高斯消元求自由变元个数)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=200 200. Cracking RSA time limit per test: ...
- SGU 260.Puzzle (异或高斯消元)
题意: 有n(<200)个格子,只有黑白两种颜色.可以通过操作一个格子改变它和其它一些格子的颜色.给出改变的关系和n个格子的初始颜色,输出一种操作方案使所有格子的颜色相同. Solution: ...
- ACM学习历程—SGU 275 To xor or not to xor(xor高斯消元)
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=275 这是一道xor高斯消元. 题目大意是给了n个数,然后任取几个数,让他们xor和 ...
- SGU 275 To xor or not to xor 高斯消元求N个数中选择任意数XORmax
275. To xor or not to xor The sequence of non-negative integers A1, A2, ..., AN is given. You are ...
- SGU 275 To xor or not to xor (高斯消元)
题目链接 题意:有n个数,范围是[0, 10^18],n最大为100,找出若干个数使它们异或的值最大并输出这个最大值. 分析: 一道高斯消元的好题/ 我们把每个数用二进制表示,要使得最后的异或值最大, ...
- SGU 275 To xor or not to xor(高斯消元)
题意: 从n个数中选若干个数,使它们的异或和最大.n<=100 Solution 经典的异或高斯消元. //O(60*n) #include <iostream> using nam ...
随机推荐
- 【转】java代码中实现android背景选择的selector-StateListDrawable的应用
原文网址:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0924/1712.html 下面的代码应该很多人都熟悉: 1 2 3 ...
- Linux学习笔记2——Linux中常用文件目录操作命令
ls 显示文件和目录列表 -l 列出文件的详细信息 -a 列出当前目录所有文件,包含隐藏文件 mkdir 创建目录 -p 父目录不存在情况下先生成父目录 cd 切换目录 touch 生成一个空文件 e ...
- UnderStand Perspective Rasterization, SV_POSITION(gl_FragCoord) to Pixel, SV mean Systems Value
Shader "UnderStandPRR" { Properties { _MainTex ("Texture", 2D) = "white&quo ...
- sshd_config 配置文件
Ssh-server 服务端 sshd_concfig Port Protocol HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_hos ...
- 简单的LR核心项集和Goto表填充演示程序
/* * 该程序用于计算语言的核心项集 * RexfieldVon * 2013年8月24日21:19:25 */ #include <stdio.h> #include <stdl ...
- hdoj 2187 悼念512汶川大地震遇难同胞——老人是真饿了【贪心部分背包】
悼念512汶川大地震遇难同胞——老人是真饿了 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- [置顶] Linux高编之进程--------fork函数的同步与异步(兄弟子进程和父子孙进程示列)
前面讲述的fork函数的基本用法,下面通过两个程序来说明fork函数同步与异步之间的关系: <1>通过fork函数实现在父进程下的四个兄弟子进程(即异步) : 函数实现代码: #inclu ...
- Windows 安装Django并创建第一个应用
学习python 也有一段时间了,语法也学得差不多了,突然就想学一学python的web开源开源框架Django,我用的是Django-1.6.2.tar.gz,可以在官网https://www.dj ...
- DB2 insert into 三种写法
db2的insert into 支持三种格式,即:一次插入一行,一次插入多行和从SELECT语句中插入. 以表为例: create table “user" ( "name&quo ...
- C#中的线程(上)-入门 分类: C# 线程 2015-03-09 10:56 53人阅读 评论(0) 收藏
1. 概述与概念 C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行.一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为"主线 ...