Description

  

​  Fibonacci数列是这样一个数列:

  

  F1 = 1, F2 = 1, F3 = 2 . . .

  

  Fi = Fi-1 + Fi-2 (当 i >= 3)

  

​  pty忽然对这个古老的数列产生了浓厚的兴趣,他想知道:对于某一个Fibonacci数Fi,

  

  有多少个Fj能够整除Fi (i可以等于j),他还想知道所有j的平方之和是多少。

  

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 2 1 8

  

Sample Output

  

  6

  55

  

HINT

  

​  对于100%的数据保证:$,,,,Q \le 3*10^6,C \le10^7,A \le10^7,B \le10^7,1 \le Q1\le C $

  

  

  

Solution

  

​  首先还是要找规律。发现\(f_j|f_i\Leftrightarrow j|i\)。

  

  对于任意一个质数\(p\),我们在模\(f_p\)的意义下观察一些斐波那契数列:

\[\begin{bmatrix}
f_1&f_2&f_3&...&f_{p-1}&0&f_{p-1}&f_{p-1}&2f_{p-1}&...\\
f_1&f_2&f_3&...&f_{p-1}&0&f_{p-1}f_1&f_{p-1}f_2&f_{p-1}f_3&...&f_{p-1}f_{p-1}&0&f_{p-1}^2f_1...
\end{bmatrix}
\]

  斐波那契数列会每\(p\)项分成一段,其中第\(i\)段是\(f_{p-1}^{i-1}f_{1..p}\)。

  

  由于\(f_{p-1}\)与\(f_p\)互质,因此\(f_{p-1}^{i-1}\)都与\(f_p\)互质。既然第一段只能在第\(p\)项,也就是该段最后一项取0,那么之后的每一段都只能在最后一项取0.

  

  也就是说\(f_p\)整除哪一些\(f_i\)呢?恰好是那些\(p|i\)的\(f_i\)。

  

​  那么对于任意整数\(j\),\(f_j\)整除哪一些\(f_i\)呢?把\(j\)质因数分解\(j=p_1^{q_1}p_2^{q_2}...p_m^{q_m}\),可知\(f_{p_k}|f_j\)(\(k\in[1,m]\))。当且仅当\(f_{p_k}|f_i\)(\(k\in[1,m]\))时,有\(f_j|f_i\),而此时\(p_k|i\)(\(k\in[1,m]\))。

  

​  故证毕:对于任意正整数\(i\)和\(j\),有\(f_j|f_i\Leftrightarrow j|i\)。

  

​  所以本题相当于询问\(q\)的因数个数、因数平方和,是线性筛的基本应用。因数平方和的表达式是

\[\sigma(x)^2=\prod_{i=1}^m(\sum_{j=0}^{q_i}p_i^{2j})
\]

  记录每个数的最小质因子的幂、除尽最小质因子的数\(nop\)就可以计算了。我第一次写的代码使用了快速幂计算\(i\%p==0\)时的累加,然而不必要,对\(\sigma^2(i)\)乘上\(p^2\)就可以把最小质因子处的\(\sum\)整体偏移,括号里需要加上的1,対整体加上\(\sigma^2(nop[i])\)即可。

  

​  注意回答询问时,不可直接输出上述统计的东西。\(f_2=1\)非常特殊,当询问\(q\)为偶数时,因为\(2|q\),所以2会被统计到,且2本来就需要统计,因为\(f_2|f_q\)是合法的的。但是当询问\(q\)为奇数时,\(2\nmid q\),所以2未被统计,但从原题意义上看,依然有\(f_2|f_q\),2应该被统计。所以\(q\)是奇数时,第一问要加上1,第二问要加上4(\(2^2=4\))。

  

  我脑残,都加上了1,居然还有50......说明那些数据模数神奇,询问都是偶数。

  

    

  

Code

  

#include <cstdio>
using namespace std;
typedef long long ll;
const int N=10000001,MOD=1e9+7;
bool vis[N];
int p[N],pcnt,sigma0[N],minpq[N];
ll nop[N],sigma2[N];
ll ans1,ans2;
void sieve(){
sigma0[1]=1; sigma2[1]=1;
for(int i=2;i<N;i++){
if(!vis[i]){
p[++pcnt]=i;
sigma0[i]=2;
sigma2[i]=(1LL*i*i+1)%MOD;
minpq[i]=1;
nop[i]=1;
}
for(int j=1;j<=pcnt&&i*p[j]<N;j++){
int x=i*p[j];
vis[x]=true;
if(i%p[j]==0){
minpq[x]=minpq[i]+1;
nop[x]=nop[i];
sigma0[x]=sigma0[i]/(minpq[i]+1)*(minpq[x]+1);
sigma2[x]=(sigma2[i]*(1LL*p[j]*p[j]%MOD)%MOD+sigma2[nop[i]])%MOD;
break;
}
sigma0[x]=sigma0[i]*sigma0[p[j]];
sigma2[x]=sigma2[i]*sigma2[p[j]]%MOD;
minpq[x]=1;
nop[x]=i;
}
}
}
int main(){
sieve();
int n,q,qlast=0,a,b,c;
scanf("%d%d%d%d%d",&n,&q,&a,&b,&c);
for(int i=1;i<=n;i++){
if(i>1) q=(1LL*qlast*a+b)%c+1;
qlast=q;
ans1+=sigma0[q]+(q&1);
(ans2+=sigma2[q]+4*(q&1))%=MOD;
}
printf("%lld\n%lld\n",ans1,ans2);
return 0;
}

【BZOJ2813】奇妙的Fibonacci的更多相关文章

  1. bzoj千题计划204:bzoj2813: 奇妙的Fibonacci

    http://www.lydsy.com/JudgeOnline/problem.php?id=2813 若j能整除i,则f[j]能整除f[i] 题目就变成了求约数个数和.约数的平方和 http:// ...

  2. BZOJ 2813: 奇妙的Fibonacci

    2813: 奇妙的Fibonacci Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 497  Solved: 134[Submit][Status][ ...

  3. 关于奇妙的 Fibonacci 的一些说明

    奇妙的 Fibonacci,多次模拟赛中出现 同时也是 BZOJ 2813 一 Fibonacci 的 GCD 如果 \(F\) 是 Fibonacci 数列,那么众所周知的有 \(\gcd(F_i, ...

  4. 【bzoj2813】 奇妙的Fibonacci数列 线性筛

    Description Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + Fi-2 (当 i >= 3) pty忽然对这个 ...

  5. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  6. Noip模拟73 2021.10.10

    老妈送来了防寒补给就很棒,再也不用晚上盖两层毛巾被了,再也不用担心晚上自动把毛巾被$split$了 还有一些好吃的耶叶 T1 小L的疑惑 考场上疑惑的切掉了 直接把$a$排序然后处理前缀和的过程中判断 ...

  7. BZOJ_2813_奇妙的Fibonacci_线性筛

    BZOJ_2813_奇妙的Fibonacci_线性筛 Description Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + ...

  8. 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找

    今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...

  9. #26 fibonacci seqs

    Difficulty: Easy Topic: Fibonacci seqs Write a function which returns the first X fibonacci numbers. ...

随机推荐

  1. 《Postgre SQL 即学即用 (第三版)》 分享 pdf下载

    链接:https://pan.baidu.com/s/1akR33VqEkt99UqJUfiy2OA提取码:3p1k

  2. 零基础学python之函数与模块(附详细的代码和安装发布文件过程)

    代码重用——函数与模块 摘要:构建函数,创建模块,安装发布文件,安装pytest和PEP 8插件,确认PEP8兼容性以及纠错 重用代码是构建一个可维护系统的关键. 代码组是Python中对块的叫法. ...

  3. CHAPTER 8 Out of Darkness 第8章 走出黑暗

    CHAPTER 8 Out of Darkness 第8章 走出黑暗 We expect scientists to be trying to discover new things, and for ...

  4. window搭建私有云,只要几分钟

    本文介绍如何在window搭建私有云网盘. 工具/原料:一台window系统电脑或者window服务器(vps),Xampp 安装包,可道云kodexplorer安装包 第一步,xampp安装 1.官 ...

  5. 从一个简单的寻路问题深入Q-learning

    这第一篇随笔实际上在我的科学网博客上是首发,我重新拿到博客园再发一次是希望以此作为我学习Q-learning的一个新的开始.以后这边主技术,科学网博客主理论.我也会将科学网那边技术类的文章转过来的.希 ...

  6. Mysql数据库的隔离级别

    Mysql数据库的隔离级别有四种 1.read umcommitted   读未提交(当前事务可以读取其他事务没提交的数据,会读取到脏数据) 2.read committed 读已提交(当前事务不能读 ...

  7. PSP总结

    一.回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 以前的回答:当初之所以选择计算机专业,是因为我比较喜欢数学,觉得计 ...

  8. Daily Scrumming* 2015.11.1(Day 13)

    一.今明两天任务表 Member Today’s Task Tomorrow’s Task 江昊 实现API小的更改 实现前后端整合 杨墨犁 实现首页 修改首页 付帅 实现创建编辑登录登出 测试修改 ...

  9. OO学习体会与阶段总结(测试与论证)

    前言   随着期末的到来,对于面向对象程序设计课程的学习也迎来了尾声.在最后一个月的从课程中,笔者对于面向对象程序规格实现层面的单元测试.正确性论证以及使用UML图描述程序的设计进行了深入的学习.通过 ...

  10. 作业MathExam

    MathExam233 一.预估与实际 PSP2.1 Personal Software Process Stages 预估耗时(分钟) 实际耗时(分钟) Planning 计划 600 650 • ...