ZOJ 2320 Cracking' RSA

news/2025/1/12 8:38:50/

             其次布尔线性方程组,高斯消元。这道题目的关键部分是看的神牛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("");}
}


 

 


http://www.ppmy.cn/news/139333.html

相关文章

STM32 AM2320 温湿度万年历 微信小程序显示及控制

功能描述: 使用STM32F103R8T6&#xff0c;红外遥控器&#xff0c;数码管&#xff0c;串口&#xff0c;预留ADC&#xff08;4~20mA输入、0~10V输入&#xff09;、485、以太网、WiFi、SD卡、USB_OTG等功能。单总线的方式采集温湿度&#xff08;因整个系统时序要求&#xff0c;所…

STM32单片机软件模拟I2C读取AM2320温湿度传感器数据

STM32单片机使用软件模拟IIC读取AM2320温湿度传感器的数据并显示在0.96寸OLED屏上。 我用的单片机是STM32F103C8T6&#xff0c;程序用的是ST标准库写的。 STM32使用硬件I2C读取SHTC3温湿度传感器&#xff1a;https://blog.zeruns.tech/archives/692.html STM32单片机读取AHT1…

bzoj2320: 最多重复子串

2320: 最多重复子串 Time Limit: 40 Sec Memory Limit: 128 MBSubmit: 246 Solved: 66[Submit][Status][Discuss] Description 一个字符串P的重复数定义为最大的整数R&#xff0c;使得P可以分为R段连续且相同的子串。比方说&#xff0c;“ababab”的重复数为3&#xff0c;“a…

OX 【HRBUST - 2320】

题目链接 HRBUST 2320 Kim喜欢玩井字棋。但是他从来都没有赢过&#xff1a;&#xff09;Kim非常好奇井字棋是否有一个必胜的策略。 给定一个局面&#xff0c;以及下一步该谁走&#xff08;o或x&#xff09;&#xff0c;请判断在双方都足够聪明的情况下&#xff08;双方一直采用…

Stm32F103 Hal库硬件iic 访问AM2320温湿度传感器

Stm32F103 Hal库硬件iic 访问AM2320温湿度传感器 管脚配置 PB6 PB7 之前用库函数&#xff0c;一直读不到&#xff0c;换hal库后正常了&#xff0c;因为要在android板上调试&#xff0c;但是板卡没来&#xff0c;只好用stm32 先调试下。 很简单&#xff0c;先初始化i2C1 i2c.c …

洛谷 2320

解题思路&#xff1a; 首先所有的钱袋都可以看成一个取或不取的情况。那么这些钱袋取或不取就可以看作0或1&#xff0c;也就是说&#xff0c;要使用一些数字表示一个范围里的所有数&#xff0c;同时这又很二进制&#xff08;取或不取&#xff09;。所以我们就把钱袋里钱的数量定…

AM2320 温湿度计 单总线读取数据

温湿度计 用单总线方式读取数据 AM2320支持IIC通信和单总线通信&#xff0c;这里只用单总线&#xff1a; 使用单总线时的接线方式时&#xff0c;只需接第二引脚SDA&#xff0c;SCL接地就行。 通信时序图&#xff1a; 由时序可见通信非常简单&#xff0c;关键点要把握好每个时序…