BZOJ 2813: 奇妙的Fibonacci
2813: 奇妙的Fibonacci
Time Limit: 20 Sec Memory Limit: 512 MB
Submit: 497 Solved: 134
[Submit][Status][Discuss]
Description
Input
第一行一个整数Q,表示Q个询问。
第二行四个整数:Q1, A, B, C
第i个询问Qi = (Qi-1 * A + B) mod C + 1(当i >= 2)
Output
Ai代表第i个询问有多少个Fj能够整除FQi。
Bi代表第i个询问所有j的平方之和。
输出包括两行:
第一行是所有的Ai之和。
第二行是所有的Bi之和。
由于答案过大,只需要输出除以1000000007得到的余数即可。
Sample Input
2 2 1 8
Sample Output
55
HINT
对于100%的数据保证:Q <= 3*10^6,C <= 10^7,A <= 10^7,B <= 10^7,1 <= Q1<= C
Source
分析:
打表可以发现答案就是约数个数以及约数平方和...
如果要严谨的证明就是这个定理:$gcd(f[i],f[j])=f[gcd(i,j)]$
证明如下:
定理1:$gcd(f[n],f[n+1])=1$
$gcd(f[n],f[n+1])$
$=gcd(f[n+1]-f[n],f[n])$
$=gcd(f[n],f[n-1])$
$……$
$=gcd(f[2],f[1])$
$=1$
定理2:$f[m+n]=f[m-1]f[n]+f[m]f[n+1]$
$f[m+n]$
$=f[n+m-1]+f[n+m-2]$
$=2*f[n+m-2]+f[n+m-3]$
$=a[x]*f[n+m-x]+b[x]*f[n+m-x-1]$
$=(a[x]+b[x])*f[n+m-x-1]+a[x]*f[n+m-x-2]$
如果$x=1$,则$a[x]=f[2],b[x]=f[1]$
如果$x=2$,则$a[x]=f[3],b[x]=f[2]$
如果$x=n$,则$a[x]=f[n+1],b[x]=f[n]$
所以$f[m+n]=f[m]*f[n+1]+f[n]*f[m-1]$
定理3:$gcd(f[m+n],f[n])=gcd(f[m],f[n])$
$gcd(f[m+n],f[n])$
$=gcd(f[m]*f[n+1]+f[n]*f[m-1],f[n])$
$=gcd(f[m]*f[n+1],f[n])$
$=gcd(f[n+1],f[n])*gcd(f[m],f[n])$
$=gcd(f[m],f[n])$
然后根据辗转相减法:
设$m=p _{1}*n+r _{1},n=p _{2}*r _{1}+r _{2},r_{1}=p _{3}*r _{2}+r _{3}......$
$gcd(m,n)=gcd(n,r _{1})=......=r _{x}$
$gcd(f[m],f[n])=gcd(f[n],f[r _{1}])=......f[r _{x}]=f[gcd(m,n)]$
然后约数和还有平方和线性筛的时候维护一下就好了...
因为f[2]=1,所以如果q是奇数约数和要+1,平方和要+4...
代码:
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
//by NeighThorn
using namespace std; const int maxn=10000000+5,mod=1e9+7; int a,b,c,q,q1,tot,ans1,ans2,vis[maxn],pri[maxn],cnt[maxn],Min[maxn],sum[maxn],els[maxn]; inline void prework(void){
cnt[1]=sum[1]=1;
for(int i=2;i<=10000000;i++){
if(!vis[i])
pri[++tot]=i,Min[i]=els[i]=1,cnt[i]=2,sum[i]=1LL*i*i%mod+1;
for(int j=1;j<=tot&&i*pri[j]<=10000000;j++){
vis[i*pri[j]]=1;
if(i%pri[j]==0){
Min[i*pri[j]]=Min[i]+1;els[i*pri[j]]=els[i];
cnt[i*pri[j]]=(cnt[i]/(Min[i]+1))*(Min[i*pri[j]]+1);
sum[i*pri[j]]=(1LL*sum[i]*pri[j]%mod*pri[j]%mod+sum[els[i]])%mod;
break;
}
cnt[i*pri[j]]=cnt[i]+1,Min[i*pri[j]]=1;
els[i*pri[j]]=i;cnt[i*pri[j]]=cnt[i]<<1;
sum[i*pri[j]]=(sum[i]+1LL*sum[i]*pri[j]%mod*pri[j]%mod)%mod;
}
}
} signed main(void){
ans1=ans2=0;prework();
scanf("%d%d%d%d%d",&q,&q1,&a,&b,&c);a%=c,b%=c;
for(int i=1;i<=q;i++){
if(i>1)
q1=(1LL*q1*a+b)%c+1;
(ans1+=cnt[q1]+(q1&1))%mod,(ans2+=sum[q1]+(q1&1)*4)%=mod;
}
printf("%d\n%d\n",ans1,ans2);
return 0;
}
By NeighThorn
BZOJ 2813: 奇妙的Fibonacci的更多相关文章
- 关于奇妙的 Fibonacci 的一些说明
奇妙的 Fibonacci,多次模拟赛中出现 同时也是 BZOJ 2813 一 Fibonacci 的 GCD 如果 \(F\) 是 Fibonacci 数列,那么众所周知的有 \(\gcd(F_i, ...
- bzoj千题计划204:bzoj2813: 奇妙的Fibonacci
http://www.lydsy.com/JudgeOnline/problem.php?id=2813 若j能整除i,则f[j]能整除f[i] 题目就变成了求约数个数和.约数的平方和 http:// ...
- 【BZOJ】1987: Zju2672 Fibonacci Subsequence
题意 给出一个序列\(A\),求一个最长的满足fib性质的子序列,输出其长度及其元素(如果多种方案,输出位置最靠前的).(\(n \le 3000\)) 题解 容易想到dp,即\(d(i, j)\)表 ...
- 【BZOJ2813】奇妙的Fibonacci
Description Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + Fi-2 (当 i >= 3) pty忽 ...
- 【bzoj2813】 奇妙的Fibonacci数列 线性筛
Description Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + Fi-2 (当 i >= 3) pty忽然对这个 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- Noip模拟73 2021.10.10
老妈送来了防寒补给就很棒,再也不用晚上盖两层毛巾被了,再也不用担心晚上自动把毛巾被$split$了 还有一些好吃的耶叶 T1 小L的疑惑 考场上疑惑的切掉了 直接把$a$排序然后处理前缀和的过程中判断 ...
- bzoj 3978: [WF2012]Fibonacci Words
Description 斐波那契01字符串的定义如下 F(n) = { 0 if n = 0 1 if n = 1 F(n-1)+F(n-2) if n >= 2 } 这里+的定义是字符串的 ...
- BZOJ [Poi2012]Fibonacci Representation
找最近的数 记忆化 (我也不知道为什么对的) #include<cstdio> #include<algorithm> #include<map> using na ...
随机推荐
- 搭建mock服务器(微信小程序)
搭建mock服务器(微信小程序) 如何在微信小程序使用mock.js实在是个问题,为了完全模拟访问路由和数据,选择在搭建本地mock服务器是一个不错的选择. 以下示例了一个mock服务器的搭建过程以及 ...
- 在React中使用Redux数据流
问题:数据流是什么呢?为什么要用数据流? 答案:1.数据流是我们的行为与相应的抽象 2.使用数据流帮助我们明确了行为的对应的响应 问题: React与数据流的关系 1.React是纯 V 层的前端框架 ...
- graphQL 启动报错No method or field found with any of the following signatures (with or without one of [interface graphql.schema.DataFetchingEnvironment] as the last argument), in priority order:
-------------------root.graphqls---------------------------这个文件用来定义属性字段,必须和实体类相同 文件里面的字段写错会报这个错误 com ...
- 认识mysql(3)
认识mysql第三篇,发出的内容适合初学者,如果能持续关注我的博客,可以全面的掌握mysql的常用知识,后续我也会陆续发出python相关的知识,关注我,和我一共进步吧! 1.SQL查询 1.执行顺序 ...
- Nginx配置根据客户端设备转发
#user nobody; worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #error ...
- 数据存储之json文件处理和csv文件处理
什么是json: JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式.它基于 ECMAScript (w3c制定的js规范)的一个子集,采用 ...
- Python3爬取人人网(校内网)个人照片及朋友照片,并一键下载到本地~~~附源代码
题记: 11月14日早晨8点,人人网发布公告,宣布人人公司将人人网社交平台业务相关资产以2000万美元的现金加4000万美元的股票对价出售予北京多牛传媒,自此,人人公司将专注于境内的二手车业务和在美国 ...
- Tame Me【驯服我】
Tame Me “Good morning,” said the fox. 早上好,狐狸说 “Good morming,” the little prince responded politely,a ...
- B1023 组个最小数 (20分)
B1023 组个最小数 (20分) 给定数字 0-9各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意 0 不能做首位).例如:给定两个 0,两个 1,三个 ...
- 使用code::blocks编译windows的dll链接库
因为机子上没有安装Visual Studio,所以找到了一种通过code::blocks编译dll的方式,踩到的坑是code::blocks默认的compiler是32位的,这样编译出的dll也是32 ...