首页 > 其他分享 >2022CSP-J组真题 2.解密

2022CSP-J组真题 2.解密

时间:2024-04-04 15:59:59浏览次数:21  
标签:组真题 pq ed ll 解密 sqrt 4n 2022CSP m2

线上OJ:

https://www.luogu.com.cn/problem/P8814

核心思想:

对本题先进行数学公式推导
已知 e d = ( p − 1 ) ( q − 1 ) + 1 = p q − p − q + 2 ed=(p-1)(q-1) + 1 = pq - p - q + 2 ed=(p−1)(q−1)+1=pq−p−q+2 ∵ n = p q , \because n = pq, ∵n=pq, ∴ n = e d − p − q + 2 \therefore n = ed - p - q + 2 ∴n=ed−p−q+2 ∴ p + q = e d − n + 2 \therefore p + q = ed - n + 2 ∴p+q=ed−n+2 由于 n, e, d 是已知的, 令 p + q = m ,可得
{ p + q = m ① pq = n ② \left\{ \begin{array}{l} \text{p + q = m ①} \\ \text{pq = n ②} \end{array} \right. {p + q = m ①pq = n ②​
由 ① 式得, q = m − p q = m - p q=m−p, 代入 ② 式得 p ( m − p ) = n p(m - p) = n p(m−p)=n,即 p 2 − m p + n = 0 p^2 - mp + n = 0 p2−mp+n=0
利用一元二次方程求解公式可得,

p ( 或 q ) = m ± m 2 − 4 n 2 p(或q) = \frac{m ± \sqrt{m^2 - 4n}}{2} p(或q)=2m±m2−4n ​​

由于题中说 p,q 为正整数,所以 m 2 − 4 n m^2 - 4n m2−4n 必为完全平方数, 我们令 r = m 2 − 4 n r = \sqrt{m^2 - 4n} r=m2−4n ​,如果 r 2 = m 2 − 4 n r^2 = m^2 - 4n r2=m2−4n,则说明 r 为整数, 此时 p = m − r 2 , q = m + r 2 p=\frac{m-r}{2}, q=\frac{m+r}{2} p=2m−r​,q=2m+r​,输出即可,否则输出NO

题解代码:
#include <bits/stdc++.h>
#define ll long long 

using namespace std;

/*
n = p*q    m = n - e*d + 2 
q = (m+sqrt(m*m-4*n))/2    p = (m-sqrt(m*m-4*n))/2
*/
int k;  //定义正整数k
ll n, d, e;  //定义n、d、e
int main()
{
    cin >> k;  //输入k
    while (k--) 
	{   //循环 k次
        cin >> n >> d >> e;  //输入n、d、e
        ll m = n - e*d + 2;  //根据数学推导,计算m
        ll r = sqrt(m*m - 4*n);  //根据数学推导,计算m*m-4*n的平方根
        if (r*r == (m*m - 4*n))
		{ 	//因为p和q是正整数,所以这里判断是否为完全平方根
            cout << (m-r)/2 << " " << (m+r)/2 << endl;  //计算p和q
        } 
		else 
		{
            cout << "NO" << endl;  //否则输出NO
        }
    }
    return 0;
}

标签:组真题,pq,ed,ll,解密,sqrt,4n,2022CSP,m2
From: https://blog.csdn.net/weixin_40252159/article/details/137342544

相关文章

  • 2015年蓝桥杯六届省赛大学B组真题
    2015年蓝桥杯六届省赛大学B组真题1.奖券数目 #include <iostream>using namespace std;int ans;bool check(int i){  while(i){    if(i%10==4)return false;    i/=10;  }  return true;}int main(){  int ans=0;  for(int i=10......
  • 解密iPhone GPU:了解其内部工作原理
    摘要了解你的显卡对于在电脑上玩现代图形要求高的游戏非常重要。本文介绍了如何轻松查看你的显卡型号以及为什么显卡在玩电脑游戏时如此关键。引言随着电脑游戏的发展,现代游戏对硬件性能的要求越来越高。十年前发布的显卡已经无法满足当前游戏的需求。因此,了解你的显卡......
  • 你在项目中做过哪些安全防范措施?,解密前端开发常见误区
    XSS攻击按照之前说的思路,先讲概念,说用途什么是XSS攻击XSS即CrossSiteScripting(跨站脚本攻击),指的是攻击者想尽一切办法将一些可执行的代码注入到网页中,利用这些恶意脚本,攻击者可获取用户的敏感信息如Cookie、SessionID等,进而危害数据安全。为了不和层叠样式表CSS......
  • 深度解密京东中台底层支撑框架
    导读:近几年,除AIGC外,软件领域相关比较大的变化,就是各相关业务领域开始如火如荼地建设中台和去中台化了。本文不探讨中台对公司组织架构涉及的变化和影响,只是从中台化演进的思路,及使用的底层支撑技术框架进行分析探讨,重点对中台及前台协作涉及到的扩展点及热部署包的底层技术细节......
  • 解密数仓的SQL ON ANYWHERE技术
    本文分享自华为云社区《GaussDBDWS的SQLONANYWHERE技术解密》,作者:tooooooooooomy。1.前言适用版本:【8.1.1(及以上)】查询分析是大数据要解决的核心问题之一,虽然大数据相关的处理引擎组件种类繁多,并提供了丰富的接口供用户使用,但相对传统数据库用户来说,SQL语言依然是使用最......
  • 解密通义灵码:软件研发工具的“大脑”
    QCon全球软件开发大会是由极客邦科技旗下InfoQ中国主办的综合性技术盛会,每年在伦敦、北京、纽约、圣保罗、上海、旧金山召开。当前,大模型技术正引领软件开发范式的革新,重塑生产关系。在此激变之中,QCon以“全面进化”作为2024年度主题,旨在携手创新技术引领者,面向5年以上工......
  • 解密Android APP加固过程中的代码混淆技术,实现加固定制化
    AndroidAPP加固是优化APK安全性的一种方法,常见的加固方式有混淆代码、加壳、数据加密、动态加载等。下面介绍一下AndroidAPP加固的具体实现方式。混淆代码使用ipaguard工具可以对代码进行混淆,使得反编译出来的代码很难阅读和理解,官网下载ipaguard即可。加固混淆......
  • 【图像加密】基于RSA实现灰色、彩色图像加密解密(含秘钥)附Matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 使用OpenEuler x86_64 实现Bouncycastle SM4加解密功能
    使用OpenEulerx86_64实现BouncycastleSM4加解密功能一、安装运行环境安装java和mavensudoyuminstalljava-17-openjdksudoyuminstallmaven安装完成后,你就可以在OpenEuler上使用Maven来管理Java项目了。二、创建项目工程在项目根目录下创建pom.xml文......
  • 使用OpenEuler x86_64 实现Bouncycastle SM2加解密
    使用OpenEulerx86_64实现BouncycastleSM2加解密一、安装运行环境安装java和mavensudoyuminstalljava-17-openjdksudoyuminstallmaven安装完成后,你就可以在OpenEuler上使用Maven来管理Java项目了。二、创建项目工程在项目根目录下创建pom.xml文件用......