已知N、A0、B0,对于给定X、Y,若A0X+B0Y能被N整除,则AX+BY也能被N整除,求所有的A、B。(0<=A、B<N)
A0X+B0Y、AX+BY均能被N整除,则显然A=k*A0,B=k*B0,0<=k<N符合条件,另外k*A0%N,k*B0%N也是符合的。至于为什么只有这两种情况,不清楚。。反正这样就A了。
#include<cstdio>
#include<algorithm>
using namespace std;
struct P
{
int A,B;
}p[10001];
bool cmp(P x,P y)
{
return ((x.A<y.A)||(x.A==y.A&&x.B<y.B));
}
int main()
{
int a,b,i,n,tot=1;
scanf("%d%d%d",&n,&p[0].A,&p[0].B);
p[0].A%=n,p[0].B%=n;
a=p[0].A,b=p[0].B;
do
{
a=(a+p[0].A)%n;
b=(b+p[0].B)%n;
p[tot].A=a;
p[tot++].B=b;
}while(a!=p[0].A||b!=p[0].B);
sort(p,p+tot-1,cmp);
printf("%d\n",tot-1);
for(i=0;i<tot-1;++i)
printf("%d %d\n",p[i].A,p[i].B);
return 0;
}