洛谷 P4942 小凯的数字(数论,逆元)

传送门


解题思路

因为可以大整数分解为l*10k+(l+1)*10k-1+(l+2)*10k-3+……+r*100,而10k%9=1,所以原整数在模9意义下等于l+(l+1)+(l+2)+(l+3)+……+r=(l+r)*(r-l+1)/2。

因为有除法,所以我们算出2在%9意义下的逆元为5,即可解决问题。

逆元不会求咋办?当场退役。

不!洛谷大佬告诉我们:

当要除的数非常小的时候,我们可以直接把要取模的数扩大相应的倍数,正常除就行了。最后再对答案取模。

即 ans = (l+r)%18*(r-l+1)%18/2%9;

AC代码

 1 #include<iostream>
 2 using namespace std;
 3 int q;
 4 long long l,r;
 5 int main(){
 6     cin>>q;
 7     for(int i=1;i<=q;i++){
 8         cin>>l>>r;
 9         cout<<(l%9+r%9)*((r-l+1)%9)*5%9<<endl;
10     }
11     return 0;
12 }

 

posted @ 2020-10-17 21:42  尹昱钦  阅读(117)  评论(0编辑  收藏  举报