时间限制: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(高斯消元)的更多相关文章

  1. SGU 200. Cracking RSA(高斯消元+高精度)

    标题效果:鉴于m整数,之前存在的所有因素t素数.问:有多少子集.他们的产品是数量的平方. 解题思路: 全然平方数就是要求每一个质因子的指数是偶数次. 对每一个质因子建立一个方程. 变成模2的线性方程组 ...

  2. Acdream1217 Cracking' RSA(高斯消元)

    题意:给你m个数(m<=100),每个数的素因子仅来自于前t(t<=100)个素数,问这m个数的非空子集里,满足子集里的数的积为完全平方数的有多少个. 一开始就想进去里典型的dp世界观里, ...

  3. SGU 200 Cracking RSA (高斯消元)

    转载请注明出处,谢谢http://blog.csdn.net/ACM_cxlove?viewmode=contents    by---cxlove 题意:给出m个整理,因子全部为前t个素数.问有多少 ...

  4. SGU 200. Cracking RSA (高斯消元求自由变元个数)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=200 200. Cracking RSA time limit per test: ...

  5. SGU 260.Puzzle (异或高斯消元)

    题意: 有n(<200)个格子,只有黑白两种颜色.可以通过操作一个格子改变它和其它一些格子的颜色.给出改变的关系和n个格子的初始颜色,输出一种操作方案使所有格子的颜色相同. Solution: ...

  6. ACM学习历程—SGU 275 To xor or not to xor(xor高斯消元)

    题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=275 这是一道xor高斯消元. 题目大意是给了n个数,然后任取几个数,让他们xor和 ...

  7. 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 ...

  8. SGU 275 To xor or not to xor (高斯消元)

    题目链接 题意:有n个数,范围是[0, 10^18],n最大为100,找出若干个数使它们异或的值最大并输出这个最大值. 分析: 一道高斯消元的好题/ 我们把每个数用二进制表示,要使得最后的异或值最大, ...

  9. SGU 275 To xor or not to xor(高斯消元)

    题意: 从n个数中选若干个数,使它们的异或和最大.n<=100 Solution 经典的异或高斯消元. //O(60*n) #include <iostream> using nam ...

随机推荐

  1. 【转】XCode快捷键

    原文网址:http://www.cnblogs.com/yjmyzz/archive/2011/01/25/1944325.html 1. 文件 CMD + N: 新文件CMD + SHIFT + N ...

  2. 未能导入activex控件,请确保它正确注册"的完美解决方案

    这个错误“未能导入activex控件,请确保它正确注册”昨天下午让我和我同事花费了3个小时来调试这个错误,在使用VS2010的winfrom编程时加入com组件的时候,报这个错误(以一个客户的机器上) ...

  3. LaTeX中参考文献管理以及注意事项

    注意:版权所有,转载请注明出处 使用LaTeX写作,很重要的一个部分就是参考文献的制作,LaTeX使用bibtex管理文章的参考文献,bibtex即是一种工具,又是一种格式的代表,它要求使用*.bib ...

  4. openStack 瓶颈测试

  5. Snake - SGU 128(构造多边形)

    题目大意:有N个点,如果可以使用这N个点连接,连接的时候任意两条边要成直角,任意边都要平行于x轴或者y轴,并且不能出现跨立相交,最终组成一个闭合的多边形,求出来这个多边形的最小长度. 分析:容易证明这 ...

  6. Conversion between json and object

    public static string ObjToJson<T>(T obj) { DataContractJsonSerializer serializer = new DataCon ...

  7. 如何优化cocos2d程序的内存使用和程序大小:第一部分_(转)

    译者: 在我完成第一个游戏项目的时候,我深切地意识到“使用cocos2d来制作游戏的开发者们,他们大多会被cocos2d的内存问题所困扰”.而我刚开始接触cocos2d的时候,社区里面的人们讨论了一个 ...

  8. Android如何在Framework层使用解锁代码

    import android.app.KeyguardManager; import android.app.KeyguardManager.KeyguardLock; import com.andr ...

  9. docker 查看容器详细

    http://www.docker.org.cn/book/docker/checking-running-image-12.html

  10. [RxJS] Filtering operators: takeUntil, takeWhile

    take(), takeLast(), first(), last(), those opreators all take number or no param. takeUtil and takeW ...