CSU-1803 2016 [同余定理

同余定义

若c|(a-b),即(a-b)/c得到整数,称a和b关于模c同余。记作a≡b(mod m)

同余性质

若a≡b(mod x),c≡d(mod x)

1.a+c≡b+d(mod x)

2.a-c≡b-d(mod x)

3.a*c≡b*d(mod x)

若ac≡bc(mod x)

4.a≡b(mod x/(x,c))

同余类定义

若a≡b(mod n),则a和b属于模n的一个同余类。

缩同余类定义

如果一个同余类中所有数和n互质,那么这个同余类就是一个缩同余类。

完全剩余系定义

模n意义下n个同余类各取一个代表组成一个集合。

缩剩余系

模n意义下φ(n)个缩同余类中个取一个代表组成的集合。

 

求解:

x=a%2016;

y=b%2016;

x*y=(a*b)%2016

如果 (a*b)%2016=0,测满足条件;   //(a*b)%2016=(a%2016*b%2016)%2016

ans++;

由于n,m可能大于2016,设数组a[i],b[i]存放余数为i的个数;

则 若满足条件,

ans+=a[i]*b[j];

附代码

#include "iostream"
#include "algorithm"
#include "cstring"
using namespace std;
long long a[5005],b[5005];
int main(){
    long long n,m;
    while(cin>>n>>m){
        long long ans=0;
        for(int i=0;i<2016;i++){  //直接对次数赋值,减少循环
            a[i]=n/2016;
            b[i]=m/2016;
        }
        for(int i=1;i<=n%2016;i++)
            a[i]++;
        for(int i=1;i<=m%2016;i++)
            b[i]++;
        for(int i=0;i<2016;i++)
            for(int j=0;j<2016;j++)
                if((i*j)%2016==0)
                    ans+=a[i]*b[j];
        cout<<ans<<endl;
    }
    return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值