#include <iostream.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
int pr_num()/*产生素数*/
{
int a,b,c;
while(c!=0||a==0)
{
srand((int)time(NULL));
c=0;
a=rand()%1000;
if(a==0) continue;
for(int i(2);i<=sqrt(a);i++)
{
b=a%i;
if(b==0) c+=1;
}
}
return(a);
}
int gcd(int a,int d)/*欧几里得算法*/
{
int r;
while(r>0)
{
r=a%d;
a=d;
d=r;
}
if(d=1) return 1;
else return 0;
}
void main()
{
int d,p,q,n,t;
while(1) /*问题出在这个循环上,不加产生的数据是一样的,加上了又产生不出来或很长时间才出来*/
{
srand((int)time(NULL));
p=pr_num();
q=pr_num();
if(p!=q)
break;
}
n=p*q;
t=(p-1)*(q-1);
while(1)
{
d=rand()%t;
if(d<t&&gcd(d,t)) break;
}
cout<<p<<" "<<q<<" "<<d<<" "<<n;
}