5,530
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
//判断两数是否互素//若为真时调整了PQ顺序 P>Q
bool IsCoprime(int P,int Q)
{
if (P<2 || Q<2 ||P == Q)
{
return false;
}
int tmp = P;
while (Q) tmp=P, P=Q, Q=tmp%Q;
return (P==1);//这里的P就是最大公约数
}
//输入P、Q
//给出a、b非负且满足a*P - b*Q = 1;且b最小的a、b
bool GetRatio(int P,int Q,int& a,int& b)
{
// if (!IsCoprime(P,Q))
// {
// return FALSE;
// }
for (b=1;b<P;b++)
{
if ((b*Q+1)%P == 0)
{
a = (b*Q+1)/P;
break;
}
}
return true;
}
void PrintOut(int p,int q)
{
int a=0;int b=0;
int c=0;int d = 0;
if (p==1||q==1)
{
printf("%d,%d任何正数都买的到\n",p,q);
}
else if (IsCoprime(p,q))
{
GetRatio(p,q,a,b);
GetRatio(q,p,c,d);
printf("%d,%d买不到的最大数是:%d\n",p,q,(b-1)*q + (d-1) * p+1);
}
else
{
printf("%d,%d买不到的最大数是:无穷大\n",p,q);
}
}
int main()
{
PrintOut(1,5);
PrintOut(2,7);
PrintOut(6,7);
PrintOut(4,7);
PrintOut(2,3);
PrintOut(3,4);
PrintOut(6,9);
PrintOut(7,5);
PrintOut(93,44);
PrintOut(193,744);
PrintOut(744,193);
system ("pause");
return 0;
}
#include <stdio.h>
#include <stdlib.h>
//判断两数是否互素//若为真时调整了PQ顺序 P>Q
bool IsCoprime(int P,int Q)
{
if (P<2 || Q<2 ||P == Q)
{
return false;
}
int tmp = P;
while (Q) tmp=P, P=Q, Q=tmp%Q;
return (P==1);//这里的P就是最大公约数
}
//输入P、Q
//给出a、b非负且满足a*P - b*Q = 1;且b最小的a、b
bool GetRatio(int P,int Q,int& a,int& b)
{
// if (!IsCoprime(P,Q))
// {
// return FALSE;
// }
for (b=1;b<P;b++)
{
if ((b*P+1)%P == 0)
{
a = (b*P+1)/P;
break;
}
}
return true;
}
void PrintOut(int p,int q)
{
int a=0;int b=0;
int c=0;int d = 0;
if (IsCoprime(p,q))
{
GetRatio(p,q,a,b);
GetRatio(q,p,c,d);
printf("%d,%d买不到的最大数是:%d\n",p,q,(b-1)*q + (d-1) * p);
}
else
{
printf("%d,%d买不到的最大数是:无穷大\n",p,q);
}
}
int main()
{
PrintOut(3,4);
PrintOut(6,9);
PrintOut(7,5);
PrintOut(93,44);
PrintOut(193,744);
PrintOut(744,193);
system ("pause");
return 0;
}
#include<stdio.h>
#define MAXSIZE 1000
int main() {
int flag[MAXSIZE] = {0};
int maxunuse[MAXSIZE] = {0};
int num1, num2, minNum, maxNum, temp, i, count = 0;
scanf("%d%d", &num1, &num2);
minNum = ((num1 < num2) ? num1 : num2);
maxNum = num1 + num2 - minNum;
for(i = 1; ;i++){
temp = i * maxNum % minNum;
if((temp) && flag[temp] == 0){
flag[temp] = 1;
maxunuse[temp] = i * maxNum -minNum;
count++;
if(count == minNum - 1){
break;
}
}
}
printf("%d\n", maxunuse[temp]);
return 0;
}
如果这个程序的结果是Accept,我再对代码做解释。