其次布尔线性方程组,高斯消元。这道题目的关键部分是看的神牛watashi的思路。另附上watashi的思路

我把他的java模板翻译成了C++的了。。。存起来以后当模板用。。。a[i][j]表示第i个数含有质数p[j]的个数,奇数个的话就是true,偶数个就是false。这样的话对于布尔方程组有,能被完全消掉的数就可以和用来消去这个数的数组成一个完全平方数。这样的话就是找多少个数能够被完全消去。这样的话答案就是2^(n-r)-1了。

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define CLR(a, b) memset(a, b, sizeof(a)) using namespace std;
const int N = 120;
const int M = 600;
bool a[N][N];
bool isp[M];
int p[N], cnt; void get_P()
{
CLR(isp, true);cnt = 0;
isp[0] = isp[1] = false;
for(int i = 2; i < M; i ++)
{
if(isp[i])
{
p[cnt ++] = i;
for(int j = i * i; j < M; j += i) isp[j] = false;
}
}
} int gauss(int N, int M)
{
int r, c, pvt;
bool flag;
for (r = 0, c = 0; r < N && c < M; ++ r, ++ c) {
flag = false;
for (int i = r; i < N; ++ i)
if (a[i][c]) {
flag = a[pvt=i][c];
break;
}
if (!flag) {
r--; continue;
}
if (pvt != r)
for (int j = r; j <= M; ++j) swap(a[r][j], a[pvt][j]);
for (int i = r+1; i < N; ++i)
if(a[i][c])
{
a[i][c] = false;
for (int j = c+1; j <= M; ++j) {
if(a[r][j]) a[i][j] = !a[i][j];
}
}
}
return r;
} int ans[N], MOD = 10000; void pt(int n)
{
int bit = 0, cr = 0;
CLR(ans, 0);ans[0] = 1;
for(int i = 0; i < n; i ++)
{
cr = 0;
for(int j = 0; j <= bit; j ++)
{
ans[j] = ans[j] * 2 + cr;
cr = ans[j] / MOD;
ans[j] %= MOD;
}
if(cr) ans[++ bit] = cr;
}
int s = 0;
while(!ans[s]) s ++;ans[s] --;
for(int i = s - 1; i >= 0; i --)
{
ans[s] = MOD - 1;
}
//cout << "bit " << bit << endl;
printf("%d", ans[bit]);
for(int i = bit - 1; i >= 0; i --)
{
int tmp = ans[i], cnt = 0;
while(tmp){ tmp /= 10; cnt ++;}
for(int j = 0; j < 4 - cnt; j ++) putchar('0');
printf("%d", ans[i]);
}
puts("");
} int main()
{
int t, n, m;get_P();
scanf("%d", &t);
while(t --)
{
scanf("%d%d", &m, &n);
for(int i = 0; i < n; i ++)
{
int tmp;
scanf("%d", &tmp);
for(int j = 0; j < m; j ++)
{
a[i][j] = false;
while(tmp % p[j] == 0)
{
tmp /= p[j];
a[i][j] = !a[i][j];
}
}
}
n -= gauss(n, m);
pt(n);
if(t) puts("");
}
}

ZOJ 2320 Cracking' RSA的更多相关文章

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

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

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

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

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

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

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

    时间限制:0.25s 空间限制:4M 题意: 给出了m(<100)个数,这m个数的质因子都是前t(<100)个质数构成的. 问有多少个这m个数的子集,使得他们的乘积是完全平方数. Solu ...

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

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

  6. ASC #1

    开始套题训练,第一套ASC题目,记住不放过每一题,多独立思考. Problem A ZOJ 2313 Chinese Girls' Amusement 循环节 题意:给定n,为圆环长度,求k < ...

  7. July 【补题】

    A(zoj 3596) bfs,记忆搜都可以, 按余数来记录状态. B(zoj 3599) 博弈,跳过 C(zoj 3592) 简单dp,题意不好懂 D(zoj 3602) 子树哈希, 对根的左右儿子 ...

  8. ACdrea 1217---Cracking' RSA(高斯消元)

    ACdrea  1217---高斯消元 Description The following problem is somehow related to the final stage of many ...

  9. ZOJ题目分类

    ZOJ题目分类初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 13 ...

随机推荐

  1. C#高级编程9-第5章 泛型

    泛型 1.泛型概述 泛型是C#的部分与中间语言IL集成.创建的类或方法指定了类型,在实例化和调用时必须指定类型进行操作. 泛型可以用于类.方法.接口和委托以及结构. 泛型也是结构,同时是运行库CLR定 ...

  2. MySQL从库com_insert无变化的原因

    大家都知道com_insert等com_xxx参数可以用来监控数据库实例的访问量,也就是我们常说的QPS.并且基于MySQL的复制原理,所有主库执行的操作都会在从库重放一遍保证数据一致,那么主库的co ...

  3. 使用邮件和RSS两种方式,订阅博客更新通知

    分类: 系统运维 点击订阅按钮,可以订阅本博客的更新 输入您的邮件地址,可以订阅本博客的更新通知,及时了解最新内容 使用RSS,订阅-马二进三名人传记-博客 也许大家是第一次听到RSS这个概念,那什么 ...

  4. Windbg 基础命令 《第一篇》

    Windbg.exe是Windows的一个调试工具,它支持两种调试模式,即“实时调试模式(Living)”和“事后调试模式(Postmortem)”. 实时模式:被调试的程序正在运行当中,调试器可以实 ...

  5. hdu2158

    最短区间版大家来找碴 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. JDBC 连Sql Server 接数据库--The TCP/IP connection to the host localhost, port 1433 has failed

    原文:https://blog.csdn.net/qq_39241986/article/details/80848855 这样的错误,你有遇到过吗? The TCP/IP connection to ...

  7. Android之判断当前网络状态

    /** * 检测网络是否可用 * @return */ public boolean isNetworkConnected() { ConnectivityManager cm = (Connecti ...

  8. python 查看模块的存放位置

    执行 dlib.__file__ 输出 '/anaconda2/lib/python2.7/site-packages/dlib/__init__.pyc'

  9. VMware Workstation 14 Pro 激活密钥

    VMware Workstation 14 Pro 激活密钥 CG54H-D8D0H-H8DHY-C6X7X-N2KG6 ZC3WK-AFXEK-488JP-A7MQX-XL8YF AC5XK-0ZD ...

  10. C预编译, 预处理, C/C++头文件, 编译控制,

    在所有的预处理指令中,#Pragma 指令可能是最复杂的了,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作.#pragma指令对每个编译器给出了一个方法,在保持与C和C++语言完全兼容的 ...