# T1

$s_1=f_1 * f_1=f_1 * f_2$, 这是显然的 ($f_1=f_2=1$)。
$s_2=s_1+f_2 * f_2=f_1 * f_2+f_2 * f_2=f_2 * (f_1+f_2)=f_2 * f_3$

#include<iostream>
#include<cstdio>
#include<cstring>
#include<climits>
#include<algorithm>
using namespace std;
#define LL long long
LL mod=1000000007,n,ans;
LL f1,f2,now;
LL a[4][4],re[4][4],kl[4][4];
LL work(LL x){
int i,j,k;
re[1][1]=1,re[2][2]=1;
a[1][1]=1,a[1][2]=1,a[2][1]=1;
while(x){
if(x&1){
for(i=1;i<=2;i++)
for(j=1;j<=2;j++){
kl[i][j]=0;
for(k=1;k<=2;k++)kl[i][j]+=a[k][j]*re[i][k];
kl[i][j]%=mod;
}
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)re[i][j]=kl[i][j];
}
for(i=1;i<=2;i++)
for(j=1;j<=2;j++){
kl[i][j]=0;
for(k=1;k<=2;k++)kl[i][j]+=a[i][k]*a[k][j];
kl[i][j]%=mod;
}
for(i=1;i<=2;i++)
for(j=1;j<=2;j++)a[i][j]=kl[i][j];
x>>=1;
}
return (re[1][1]*re[1][2])%mod;
}
int main()
{
freopen("crazy.in","r",stdin);
freopen("crazy.out","w",stdout);
scanf("%lld",&n);
printf("%lld",work(n));
return 0;
}

# T2

Note：幸运的数字和我今天的幸运数字不是同一个东西。

ans=能被幸运数字整除的数的个数-（能被 1 个悲剧数字和幸运数字整除的数的个数）+（能被两个悲剧数字和幸运数字整除的数的个数）-…

#include<iostream>
#include<cstdio>
#include<cstring>
#include<climits>
#include<algorithm>
using namespace std;
#define LL unsigned long long
int n;LL l,r,uk[20],luk,ans;
LL gcd(LL x,LL y){
LL r=x%y;
while(r){x=y,y=r,r=x%y;}
return y;
}
void dfs(int x,LL fh,LL num){
if(num>r)return;
if(x==n+1){ans+=fh*(r/num-(l-1)/num);return;}
dfs(x+1,fh,num),dfs(x+1,-fh,num/gcd(num,uk[x])*uk[x]);
}
int main()
{
freopen("lucky.in","r",stdin);
freopen("lucky.out","w",stdout);
scanf("%llu%d%llu%llu",&luk,&n,&l,&r);
for(int i=1;i<=n;i++)scanf("%llu",&uk[i]);
dfs(1,1,luk);
printf("%llu",ans);
return 0;
}

# T3

#include<iostream>
#include<cstdio>
#include<cstring>
#include<climits>
#include<algorithm>
using namespace std;
#define LL long long
LL a,b,n,ans;
LL exgcd(LL a,LL b,LL &x,LL &y){
if(!b){x=1,y=0;return a;}
LL re=exgcd(b,a%b,x,y),tmp=x;
x=y,y=tmp-(a/b)*y;
return re;
}
LL bs(LL x){if(x<0)return -x;else return x;}
int main()
{
freopen("feed.in","r",stdin);
freopen("feed.out","w",stdout);
LL d,x,y,kx,ky,i,t;
scanf("%lld%lld",&a,&b);
d=exgcd(a,b,kx,ky);
a/=d,b/=d;
while(scanf("%lld",&n)!=EOF){
if(n%d){printf("BeiJu!\n");continue;}
x=kx*(n/d),y=ky*(n/d);ans=LLONG_MAX;
t=-(x/b);
for(i=t-1;i<=t+1;i++)ans=min(ans,abs(x+b*i)+abs(y-a*i));
t=y/a;
for(i=t-1;i<=t+1;i++)ans=min(ans,abs(x+b*i)+abs(y-a*i));
t=(y-x)/(a+b);
printf("%lld\n",ans);
}
return 0;
}

# 反思

1. 我最大的问题就是思维不严谨，在数学这一块就额外体现出来了，数学的题目大多有很多细节要考虑，要注意，一旦思维出现了漏洞，就连暴力分都拿不到。而且做这类问题的时候一定不能 “想当然” 的认为 “应该可以”，因为想一道题目的解法只想到了一半就是前功尽弃，只有暴力分。一定要在” 确定可以 “（虽然这个确定不一定是证明，也可以是” 大量的事实证明 “，因为是 Oi 题嘛！）的前提下才能使用想到的解法。
2. 思维不够灵活，要掌握好各种数学公式的证明，推理，多做一些题感受数学思维。
3. 不要迷信对拍，也不要迷信思路，思路检查与数据检查同样重要。当思维陷入一个完全的误区的时候，可能会有一组数据将你拯救回来。
4. 考试的时候不要紧张，哪怕做不出题目来也不要紧张。一场考试可能是水题和难题并存的，水题也可能会伪装得很好，所以” 透过现象看本质 “很关键，判断题目难度的眼光也很重要。这个眼光可能也要通过多做题来积累了。
5. 保持睡眠充足很重要。。。