首页 > 其他分享 >JZOJ【基础】素数密码学//注意:后面有彩蛋

JZOJ【基础】素数密码学//注意:后面有彩蛋

时间:2024-10-22 18:52:26浏览次数:3  
标签:p2 输出 p1 JZOJ int 素数 kong 彩蛋 密码学

VIP

以下是一个C++程序,该程序接受一个合数n作为输入,并尝试将其分解为两个素数的乘积。如果成功找到这样的分解,它将输出所有可能的分解方式;如果找不到,它将输出"error"。

#include<bits/stdc++.h>
using namespace std;

bool isPrime(int num){
    if (num<=1){
	    return false;
	}
    for (int i=2; i<=sqrt(num);++i){
        if (num%i==0) 
		    return false;
    }
    return true;
}
int main(){
    int n;
    cin>>n;
    bool flag=false;
    for (int p1=2;p1<=sqrt(n);++p1){
        if (isPrime(p1) && n%p1==0){
            int p2=n/p1;
            if (isPrime(p2)){
                cout<<"p1="<<p1<<" p2="<<p2<<endl;
                if (p1!=p2){
                    cout<<"p1="<<p2<<" p2="<<p1<<endl;
                }
                flag=true;
            }
        }
    }
    if (!flag) {
        cout<<"error"<<endl;
    }
    return 0;
}

这个程序首先定义了一个isPrime函数来检查一个数是否为素数。然后,在main函数中,它读取输入的合数n,并使用一个循环来检查从2到sqrt(n)的每个数p1,看看它是否是n的因数且为素数。如果找到这样的p1,则计算p2 = n / p1,并检查p2是否为素数。如果p1和p2都是素数,则输出它们的组合,并标记为已找到分解。最后,如果没有找到任何有效的分解,则输出"error"。

注意,为了避免输出重复的素数对(如当p1和p2相等时),在输出完p1和p2后,如果p1不等于p2,则再输出一次交换后的p1和p2。但是,根据题目描述,如果p1和p2相同(如169分解为13*13),则只需输出一次p1=13 p2=13,因此这个额外的检查对于这种情况是不必要的,但保留它也无害,因为它会检查到p1和p2是否相等并避免重复输出。然而,由于我们已经在找到素数对时直接输出了它们,所以这里的额外检查实际上是多余的,并且我已经在代码中注释掉了它的第二次输出以避免混淆。

当然,你以为就这么点吗?

不可能

文字版恶魔轮盘

上代码

#include<windows.h>
#include<bits/stdc++.h>
using namespace std;
int Your=6,Other=6;
string daojuname[]={"放大镜","手铐","小刀","烟","饮料"};
double Yourmoney;

int shi,kong;
int q[10],qlen;//1 实 2 空 
int Rand(int x,int y){
	int A=rand(),B=rand();
	return A*1ll*B%(y-x+1)+x;
}
int T;//ou->you
int daojulen;
int daoju[10];
int daojulen1;
int daoju1[10];
void build_gun(){
	kong=Rand(1,4);
	shi=Rand(1,4);
	qlen=0;
	printf("%d发实弹,%d发空弹\n",shi,kong);
	int a1=kong,a2=shi;
	for(int i=1;i<=kong+shi;i++){
//      Sleep(50);
		int sum=Rand(1,a1+a2);
		if(sum<=a1){
			a1--;
			q[++qlen]=2;
		}else{
			a2--;
			q[++qlen]=1;
		}
	}
	int maxn=min(4,8-daojulen);
	printf("你获得了%d个道具:\n",maxn);
	daojulen+=maxn;
	for(int i=1;i<=maxn;i++){
//      Sleep(50);
		int kkk=Rand(0,4);
		daoju[kkk]++;
		cout<<daojuname[kkk];
		if(i!=maxn){
			printf(",");
		}
	}
	printf("\n");
	maxn=min(4,8-daojulen1);
	printf("恶魔获得了%d个道具:\n",maxn);
	daojulen1+=maxn;
	for(int i=1;i<=maxn;i++){
		int kkk=Rand(0,4);
		daoju1[kkk]++;
		cout<<daojuname[kkk];
		if(i!=maxn){
			printf(",");
		}
	}
	printf("\n");
	system("pause");
	system("cls");
}
void IsOver(){
	if(Your<=0){
		printf("你输了\n");
		system("pause");
		exit(0);
	}
	if(Other<=0){
		printf("你赢了\n你获得了奖金$%.2lf\n",Yourmoney);
		system("pause");
		exit(0);
	}
}
void wait(){
	for(int i=1;i<=3;i++){
		Sleep(500);
		printf(".");
	}
	Sleep(500);
}
int Hurt=1;
int shoukao_you;
void Timeyou(){
	int x;
	while(1){
		printf("你的生命:%d/6\n恶魔生命:%d/6\n",Your,Other);
		printf("剩余实弹数:%d    剩余空弹数:%d\n",shi,kong);
		printf("你现在拥有的道具:\n");
		for(int i=0;i<=4;i++){
			cout<<daojuname[i];
			printf("%d",daoju[i]);
			printf("个");
			if(i!=4){
				printf(",");
			}
		}
		printf("\n");
		printf("恶魔现在拥有的道具:\n");
		for(int i=0;i<=4;i++){
			cout<<daojuname[i];
			printf("%d",daoju1[i]);
			printf("个");
			if(i!=4){
				printf(",");
			}
		}
		printf("\n");
		printf("现在是你的回合\n");
		printf("你要\n1.向恶魔开枪\n2.向自己开枪\n");
		for(int i=0;i<=4;i++){
			printf("%d.使用",i+3);
			cout<<daojuname[i]<<'\n';
		}
		scanf("%d",&x);
		if(1<=x&&x<=7){
			break;
		}
		printf("输入不合法\n");
		Sleep(1145);
		system("cls");
	}
	if(x==1){
		printf("你决定向恶魔开枪");
		T++;
		wait();
		if(q[qlen]==2){
			Yourmoney+=(double)(200

标签:p2,输出,p1,JZOJ,int,素数,kong,彩蛋,密码学
From: https://blog.csdn.net/A334356/article/details/143165755

相关文章

  • 关于密码学
    对称密码体制概述:也叫私钥密码体制,用私钥加密明文后,连同私钥一起打包过去,接收方接收后就用同一把私钥解密。在区块链中应用于非直接公开数据的加密、区块链溯源数据加密等。比较典型的对称密码体制算法包括DES(DataEncryptionStandard数据加密标准)算法及其变形Triple......
  • 古典密码学 (一)
    凯撒密码恺撒密码(CaesarCipher)又被称为凯撒变换或者叫做变换密码。该密码是以凯撒大帝的名字命名的。凯撒密码是一种替换加密,通过该明文中的所有字母都在字母表上向后或者向前移动固定数目替换为密文例如当偏移量为3的时候,字母A就会变成D,字母B就会被替换成E凯撒密码不......
  • 欢迎来到密码学的奇妙世界!(`^`=◕ᴥ◕=`^`)
    欢迎来到密码学的奇妙世界!(^=◕ᴥ◕=^)大家好!今天我们将一起探索一个神秘而迷人的领域——密码学!在这个信息爆炸的时代,保护我们的个人信息安全显得尤为重要,而密码学正是为此而生的科学。(★≧▽^))★☆什么是密码学?密码学,简单来说,就是研究如何保护信息的学问。它涵盖了从数据加......
  • 密码学承诺之原理和应用 - Kate多项式承诺
    主页微信公众号:密码应用技术实战博客园首页:https://www.cnblogs.com/informatics/GIT地址:https://github.com/warm3snow简介多项式承诺是一种实用性比较强的密码学承诺方案,允许一个方(承诺者)向另一个方(验证者)承诺一个多项式的值,而不泄露多项式的具体形式。在零知识证明、可......
  • 密码学承诺之原理和应用 - pedersen承诺
    主页微信公众号:密码应用技术实战博客园首页:https://www.cnblogs.com/informatics/GIT地址:https://github.com/warm3snow简介在上一篇文章《密码学承诺之原理和应用-概览》中,我们详细介绍了常见的密码学承诺原理,本节我们将重点介绍Pedersen承诺的实现和应用。在区块链技......
  • 密码学承诺之原理和应用 - sigma承诺
    微信公众号:密码应用技术实战博客园首页:https://www.cnblogs.com/informatics/GIT地址:https://github.com/warm3snow简介在上一篇文章《密码学承诺之原理和应用-概览》中,我们详细介绍了常见的密码学承诺原理,本节我们将重点介绍Sigma承诺的实现和应用。Sigma承诺Sigma承诺是......
  • 密码学承诺原理与应用 - 概览
    作者:@warm3snowhttps://github.com/warm3snow微信公众号:密码应用技术实战博客园首页:https://www.cnblogs.com/informatics/标签:技术分享模板目录简介承诺方案原理符号定义方案定义常见承诺方案和原理哈希承诺ElGamal承诺Pedersen承诺零知识证明承诺Sigma承诺Sigma承诺正确......
  • CTF密码学基础知识整理
    一.常见编码转换(1)整数转ascii码INT->CHAR:chr(97)CHAR->INT:ord('a')(2)hex转ASCII>>>importbinascii>>>binascii.a2b_hex('666c6167')b'flag'>>>binascii.b2a_hex(b'flag')b'666c6167&......
  • 密码学初识
    咱也是学上密码学了密码?可能有人要说:啊!这个我懂!不就是账号密码什么的嘛可能还有人说:啊!这个我懂!我还会背摩斯密码呢!但是,“密码学”研究的主要是加密与解密的过程它这个“密码”指的不是寻常说的password(口令),而是cryptography历史上,密码学经过了从古典到近代再到现代的发......
  • 基于OpenSSL的密码管理系统-应用密码学课程报告
    第1章概要设计1.1设计目的本研究旨在设计并实现一个基于OpenSSL的密码管理系统,该系统具备密钥对的生成、密钥上传、密钥的核对、身份认证、文件与邮件的加密和解密、数字签名及数字证书管理等常用功能。研究的意义主要体现在以下几个方面:提升网络信息安全水平:通过集成多种密......