求助,玄关!!!
  • 板块灌水区
  • 楼主VirtualImage
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/28 22:30
  • 上次更新2024/4/29 13:55:17
查看原帖
求助,玄关!!!
1278584
VirtualImage楼主2024/4/28 22:30
#include<cstdio>
#include<cstring>
const int maxn=1e4+5;
char j[maxn],o[maxn],str2[maxn];//1,2,3
char q2[maxn];//4
char str[maxn];
int prime(int x,int n,int ans){
	if(x>n) return ans;
	if(!(n%x)) ans++;
	prime(++x,n,ans);
}
int is_prime[maxn];
void init_is_prime(){
	for(int i=2;i<=maxn;i++)
		is_prime[i]=!is_prime[i];
}
void init1(int m){
	init_is_prime();
	for(int i=2;i<=m;i++){
		if(is_prime[i])
			for(int j=i*2;j<=m;j+=i)
				is_prime[j]=!is_prime[j];
	}
}
void clear(int n,char c){
	for(int i=0;i<n;i++){
		if(c=='1') 
			j[i]=0;
		else if(c=='2')
			o[i]=0;
		else if(c=='3')
			str2[i]=0;
		else
			q2[i]=0;
	}
}
namespace String{
	void f1(int n){
		int len1=-1,len2=-1;
		for(int i=0;i<n;i++){
			if(i==0)
				o[++len1]=str[i];
			else{
				if(i%2)
					j[++len2]=str[i];
				else
					o[++len1]=str[i];
			}
		}
		int biglen=len1+len2;
		for(int i=0;i<biglen;i++){
			if(i<(biglen-len2)) 
				str2[i]=j[i];
			else
				str2[i]=o[(biglen-len2)+(i-len2)];
		}
		for(int i=0;i<biglen;i++)
			str[i]=str2[i];
		clear(len2,'1');
		clear(len1,'2');
		clear(biglen,'3');
	}
	void f2(int n){
		for(int i=0,j=n-1;i>n&&j>-1;i++,j--)
			q2[i]=str[j];
		for(int i=0;i<n;i++)
			str[i]=q2[i];
		clear(n,'4');
	}
	void f3(int n){
		for(int i=0;i<n;i++){
			if(str[i]<'y'&&str[i]>='a') 
				str[i]++;
			else if(str[i]<'Y'&&str[i]>='A')
				str[i]++;
		}
	}
};
int main(){
	scanf("%s",str);
	int n=strlen(str);
	int m=prime(1,n,0);
	init1(n);
	bool flag=false;
	for(int i=1;i<=n;i++)
		if(is_prime[i]){
			flag=!flag;
			break;
		}
	for(int i=0;i<m;i++){
		String::f1(n);
		if(flag) String::f2(n);
		String::f3(n);
	}
	for(int i=0;i<n;i++)
		printf("%c",str[i]);
	return 0;
}

file:///C:/Users/guoli/Documents/WeChat Files/wxid_ea0romtkexpt21/FileStorage/File/2024-04/加密规则.pdf

这是加密规则,要解密的是Bnnge_anS_CQe_Hiha__u_D_giinhiii_g__Wn_hShunGe_inXMaSaJ_

求助,玄关

2024/4/28 22:30
加载中...