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