SGU 119 Magic Pairs

已知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;
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值