数学专题测试2

A.B

  看到$gcd==1$大约是莫比乌斯反演。然后只需要求出来$gcd$至少为$i$的方案数,推一下可以发现是个组合数并且只与$n/i$有关,于是直接分块就可以了。

  然后发现这个东西需要求莫比乌斯函数前缀和,杜教筛即可。

  然而这样是$O(\sqrt{n}*k)$的,会T,所以只需要预处理一部分阶乘逆元,然后就可以$O(1)$算出大部分组合数,其余直接$O(k)$暴力即可。

B. B君的回忆

  题意:给定一个类斐波那契数列$g(n)$,求其嵌套$k$次之后在$N$处的取值。

  可以发现,这个东西在区模意义下是有循环节的,并且打表发现,循环节的长度大约与$p$同级。于是可以用BSGS对于转移矩阵求出这个循环节,这样卡卡常就有60~80了。

  然而这样在极限数据下复杂度可以达到$O(TK\sqrt{p})$,在本题肯定过不去。

  于是可以考虑一些性质。

  设$f(a)$表示在模a意义下的循环节,那么有结论:

  1.若a,b互质,那么$f(ab)=lcm(f(a)f(b))$。

  2.若p为质数,那么$f(p^{k})=p^{k-1}*f(k)$。

  第一个比较好理解,第二个可以类比欧拉函数的一些性质,实际上这两个函数也有很多的相似点。

  于是可以将每个模数分解质因数,然后对于每个质数暴力BSGS求出循环节,顺便记忆化一下,然后求出$lcm$,就可以AC了。

C. sanrd

  大神题,考场上打出来真的挺难的。。。然而暴力还是能AC的

       首先特判$C=0$,然后特判$b=0$,然后化简,中间有一些技巧:

  $c^{2ij}=c^{(i+j)^2-i^2-j^2}$,于是可以将两部分贡献分开,然后化出卷积式。

  另一个技巧是$b*c^{4k}+d*c^{2k}+e$,将其转化为$a*(c^{2k}+y)^2+z$,其中$a,y,z$是可以推出的常数,然后就可以二项式展开。

  然而这题可以数据范围小,时限长,所以直接秦九韶循环展开暴力就可以。考场上自认为大约有六七十分了感觉良好,没想到直接AC了。。。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long LL;
 4 const int mod=1e6+3,N=6e4+5;
 5 inline int read(int x=0,bool f=0,char ch=getchar()){
 6     for(;!isdigit(ch);ch=getchar()) f=ch=='-';
 7     for(; isdigit(ch);ch=getchar()) x=(x<<3)+(x<<1)+(ch^48);
 8     return f?-x:x;
 9 }
10 int n;
11 long long a[N],b,c,d,e;
12 inline LL qpow(LL x,LL y,LL ans=1){
13     for(;y;y>>=1,x=x*x%mod) if(y&1) ans=ans*x%mod;
14     return ans;
15 }
16 int main(){
17     n=read(),b=read(),c=read(),d=read(),e=read();
18     for(int i=0;i<n;++i) a[i]=read();
19     for(int i=0;i<n;++i){
20         LL x=(b*qpow(c,4*i)+d*qpow(c,2*i)+e)%mod,X2=x*x%mod,X3=X2*x%mod,
21         X4=X3*x%mod,X5=X4*x%mod,X6=X5*x%mod,X7=X6*x%mod,X8=X7*x%mod,X9=X8*x%mod,
22         X10=X9*x%mod,X11=X10*x%mod,X12=X11*x%mod,X13=X12*x%mod,X14=X13*x%mod
23         ,X15=X14*x%mod,X16=X15*x%mod,X17=X16*x%mod,X18=X17*x%mod,
24         X19=X18*x%mod,X20=X19*x%mod,X21=X20*x%mod,X22=X21*x%mod,
25         X23=X22*x%mod,X24=X23*x%mod,X25=X24*x%mod,X26=X25*x%mod,
26         X27=X26*x%mod,X28=X27*x%mod,X29=X28*x%mod,X30=X29*x%mod,
27         X31=X30*x%mod,X32=X31*x%mod,X33=X32*x%mod,X34=X33*x%mod,
28         X35=X34*x%mod,X36=X35*x%mod,X37=X36*x%mod,X38=X37*x%mod,
29         X39=X38*x%mod,X40=X39*x%mod,X41=X40*x%mod,X42=X41*x%mod,
30         X43=X42*x%mod,X44=X43*x%mod,X45=X44*x%mod,X46=X45*x%mod,
31         X47=X46*x%mod,X48=X47*x%mod,X49=X48*x%mod,X50=X49*x%mod,ans=0;
32         register int j;
33         for(j=n-1;j>49;j-=50){
34             ans=ans*X50,ans+=a[j]*X49,ans+=a[j-1]*X48,
35             ans+=a[j-2]*X47,ans+=a[j-3]*X46,ans+=a[j-4]*X45,
36             ans+=a[j-5]*X44,ans+=a[j-6]*X43,ans+=a[j-7]*X42,
37             ans+=a[j-8]*X41,ans+=a[j-9]*X40,ans+=a[j-10]*X39,
38             ans+=a[j-11]*X38,ans+=a[j-12]*X37,ans+=a[j-13]*X36,
39             ans+=a[j-14]*X35,ans+=a[j-15]*X34,ans+=a[j-16]*X33,
40             ans+=a[j-17]*X32,ans+=a[j-18]*X31,ans+=a[j-19]*X30,
41             ans+=a[j-20]*X29,ans+=a[j-21]*X28,ans+=a[j-22]*X27,
42             ans+=a[j-23]*X26,ans+=a[j-24]*X25,ans+=a[j-25]*X24,
43             ans+=a[j-26]*X23,ans+=a[j-27]*X22,ans+=a[j-28]*X21,
44             ans+=a[j-29]*X20,ans+=a[j-30]*X19,ans+=a[j-31]*X18,
45             ans+=a[j-32]*X17,ans+=a[j-33]*X16,ans+=a[j-34]*X15,
46             ans+=a[j-35]*X14,ans+=a[j-36]*X13,ans+=a[j-37]*X12,
47             ans+=a[j-38]*X11,ans+=a[j-39]*X10,ans+=a[j-40]*X9,
48             ans+=a[j-41]*X8,ans+=a[j-42]*X7,ans+=a[j-43]*X6,
49             ans+=a[j-44]*X5,ans+=a[j-45]*X4,ans+=a[j-46]*X3,
50             ans+=a[j-47]*X2,ans+=a[j-48]*x,ans+=a[j-49],ans%=mod;
51         }
52         for(;~j;--j) (ans=ans*x+a[j])%=mod;
53         printf("%lld\n",ans%mod);
54     }
55     return 0;
56 }暴力
???
posted @ 2020-01-04 21:33  tdcp  阅读(268)  评论(1编辑  收藏  举报