|
地板
楼主 |
发表于 2018-6-28 15:12:13
|
只看该作者
交上去之后依然改善不明显,我们再次发现,1和10001的b次方末尾的四位数字是一样的,所以我们计算整万的末尾四位数,直接累加,最后不整万的部分独立计算就行了。
- #include<iostream>
- using namespace std;
- int n,a,b;
- int i,j,s,t,bb,tt;
- int ksm(int a,int b)
- {
- int t=1,tt=a;
- int bb=b;
- while (bb>0)
- {
- if (bb%2==1) t=(t*tt)%10000;
- tt=(tt*tt)%10000,bb=bb/2;
- }
- return t%10000;
- }
- int s09999()
- {
- int s=0;
- for (i=0;i<=9999;i++)
- s=(s+ksm(i,b))%10000;
- return s;
- }
- int main()
- {
- cin>>n;
- while (n--)
- {
- cin>>a>>b;
- s=s09999();
- s=s*(a/10000);a=a%10000;
- for (i=1; i<=a; i++)
- s=(s+ksm(i,b))%10000;
- cout<<s%10000<<endl;
- }
- return 0;
- }
复制代码
|
|