我是靠谱客的博主 活泼金针菇,这篇文章主要介绍(林大oj1276),现在分享给大家,希望可以做个参考。

林大oj1276 感谢冯学长的指点

题目地址:https://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1276
本题思路是:先积分成等比数列,利用等比数列性质求和,再求导还原。
用到了 —— 费马小定理、快速幂、快速乘(防止直接乘爆longlong,用加代替乘,边加边取模)、大数字符读入处理、还有逆元。

经过积分 求和 再求导 得到为
(n-1)[(b+1)nb-(a+1)na]-(nb+1-na+1)
———————————————%mod
       (n-1)2

注意:(b+1) (a+1)需要对mod取模
而根据费马小定理nb na na+1 nb+1 中的a b需要对mod-1取模(巨坑 wrong了好几次)

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream> #include <stdio.h> #include <algorithm> #include <math.h> #include <stdlib.h> #include <string.h> #define mod 10000000033 using namespace std;/// long long cheng(long long m,long long n)///暂且命名为快速乘模板(可以防止直接乘爆longlong) {//对mod取模 m=m%mod; n=n%mod; long long b=0; while(n>0) { if(n&1) b=(b+m)%mod; n=n>>1; m=(m+m)%mod; } //printf("%lldn",mod); return b; } long long cheng1(long long m,long long n)///暂且命名为快速乘模板(可以防止直接乘爆longlong) {///对mod-1取模 —费马小定理 n^b^ n^a^ n^a+1^ n^b+1^ 中的a b需要对mod-1取模 m=m%(mod-1); n=n%(mod-1); long long b=0; while(n>0) { if(n&1) b=(b+m)%(mod-1); n=n>>1; m=(m+m)%(mod-1); } //printf("%lldn",mod); return b; } long long quick(long long m,long long n)///快速幂 { long long b=1; while(n>0) { if(n&1) b=cheng(b,m)%mod; n=n>>1; m=(cheng(m,m))%mod; } //printf("%lldn",mod); return b%mod; } char ax[25],bx[25]; int main() { long long t,n,a1,a2,ans,x1,x2,x3,x4,x5; long long aa,aaa,bb,bbb,x,l1,l2,i; scanf("%lld",&t); while(t--) { scanf("%s%s%lld",ax,bx,&n); // printf("%sn%sn",ax,bx); l1=strlen(ax); l2=strlen(bx); aa=aaa=bbb=bb=0; for(i=0;i<l1;i++) { x=ax[i]-'0'; aa=(aa*10+x)%(mod-1);//n^b^ n^a^ n^a+1^ n^b+1^ 中的a b需要对mod-1取模 aaa=(aaa*10+x)%mod;///(b+1) (a+1)需要对mod取模 } for(i=0;i<l2;i++) { x=bx[i]-'0'; bb=(bb*10+x)%(mod-1);//n^b^ n^a^ n^a+1^ n^b+1^ 中的a b需要对mod-1取模 bbb=(bbb*10+x)%mod;///(b+1) (a+1)需要对mod取模 } n=n%mod; //printf("%lld %lldn",a,b); if(n==1) { x=quick(2,mod-2);///除于2 对2取逆元 ans=cheng(aaa+1+bbb,bbb-aaa); ans=cheng(ans,x); printf("%lldn",ans%mod); continue; } else { if(n==0) { printf("0n"); continue; } else { a1=quick(n,aa)%mod; a2=quick(n,bb)%mod; //Ex_gcd(n-1,mod,x,y); x1=cheng(bbb+1,a2); x1=cheng(x1,n-1); x2=cheng(aaa+1,a1); x2=cheng(x2,n-1); x3=cheng(a2,n); x4=cheng(a1,n); x5=cheng(n-1,n-1); x5=quick(x5,mod-2); ans=(x1-x2+mod-x3+x4+mod)%mod; ans=cheng(ans,x5); printf("%lldn",ans%mod); } } } return 0; }

有问题可以评论区问我

最后

以上就是活泼金针菇最近收集整理的关于(林大oj1276)的全部内容,更多相关(林大oj1276)内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部