#线性筛,斐波那契数列,GCD#BZOJ 2813 奇妙的Fibonacci
题目
有一个斐波那契数列,满足
\]
多次询问给出一个\(n\)(\(n=(n'*A+B)\bmod C+1\)),问
\]
\(C\leq 10^7\)
分析
考虑\(F_i|F_n\)也就是\(gcd(F_i,F_n)=F_i(i\leq n)\)
根据\(gcd(F_i,F_n)=F_{gcd(i,n)}\)可以知道相当于询问\(i|n\)
当然我还是证明一下吧
首先引理
\]
证明:
\]
\]
\]
以此类推,可以得证
有了这条,还有一个显然的引理就是\(\forall i\in N*,gcd(f_i,f_{i+1})=1\)
想要证明\(GCD\)不容易,一般都是通过更相减损法证明
\]
那么
\]
根据更相减损法和引理推出
那么显然可以通过这样的方法推出\(gcd(F_n,F_m)=F_{gcd(n,m)}\)
注意\(F_0=0\),不然就推不出来
证明写了这么长,那么可以得到答案其实就是
\]
一个是约数个数和,另一个是约数平方的和,分别维护。
先进行质因数分解得出\(n=\prod_{i=1}^k{p_i}^{c_i}\)
那么约数个数和就是\(\prod_{i=1}^k(c_i+1)\)
需要用一个辅助数组表示最小质因数的指数;
约数平方和就是\(\prod_{i=1}^k\frac{{p_i}^{c_i+1}-1}{p_i-1}\)
不需要快速幂,维护最小质因数的答案,用秦九韶算法层层推上去就可以了
可是你的约数平方和会不会爆\(\text{long long}\)??
估摸一下,我觉得不会,大概在\(10^{15}\sim 10^{17}\)这一段吧,
反正构造数据也不会特意卡的是吧
当你兴高采烈的时候会发现有锅,
\(F_2=1\),所以对于奇数要特判
代码
#include <cstdio>
#define rr register
using namespace std;
typedef long long lll;
const int N=10000011,mod=1000000007,M=6700011;
int Cnt,D[N],Mc[N],prime[M]; lll v[N],Si[N],Pp[M];
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline void Pro(int n){
v[1]=Si[1]=D[1]=1;
for (rr int i=2;i<=n;++i){
if (!v[i]) v[i]=Si[i]=1ll*i*i+1,D[i]=Mc[i]=2,
prime[++Cnt]=i,Pp[Cnt]=v[i]-1;
for (rr int j=1,t=n/i;j<=Cnt&&prime[j]<=t;++j){
if (i%prime[j]==0){
Mc[i*prime[j]]=Mc[i]+1,
D[i*prime[j]]=D[i]/Mc[i]*Mc[i*prime[j]],
v[i*prime[j]]=v[i]*Pp[j]+1,
Si[i*prime[j]]=Si[i]/v[i]*v[i*prime[j]];
break;
}
Mc[i*prime[j]]=2,v[i*prime[j]]=Pp[j]+1,
D[i*prime[j]]=D[i]*D[prime[j]],
Si[i*prime[j]]=Si[i]*v[i*prime[j]];
}
}
}
signed main(){
rr int ans1=0,ans2=0,Test,Q,A,B,C;
scanf("%d%d%d%d%d",&Test,&Q,&A,&B,&C),Pro(C);
for (;Test;--Test,Q=(1ll*A*Q+B)%C+1)
ans1=mo(ans1,D[Q]+(Q&1)),
ans2=mo(ans2,(Si[Q]+4*(Q&1))%mod);
return !printf("%d\n%d",ans1,ans2);
}
#线性筛,斐波那契数列,GCD#BZOJ 2813 奇妙的Fibonacci的更多相关文章
- Python初学者笔记:打印出斐波那契数列的前10项
问题:斐波那契数列(意大利语: Successione di Fibonacci),又称黄金分割数列.费波那西数列.费波拿契数.费氏数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.- ...
- 斐波那契数列 yield 和list 生成
def fab_demo4(max): a,n,b = 0,0,1 while n < max: yield b # 生成器走到这一步返回b,需要再次调用才能继续执行 a,b = b,a+b n ...
- Python学习笔记_斐波那契数列
""" 1.生成100项斐波那契数列 2.求第n项斐波那契数列的值是多少 3.给定终止值,生成此前斐波那契数列 """ # 求第n项斐波那契 ...
- 详解PHP如何实现斐波那契数列的简单实例
文章来自:有解网 http://www.youjieweb.com/original/index/articleId/64.html 使用场景: 面试 本文讲的是如何用php实现PHP实现斐波那契数列 ...
- 关于斐波拉契数列(Fibonacci)
斐波那契数列指的是这样一个数列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10 ...
- 斐波拉契数列加强版——时间复杂度O(1),空间复杂度O(1)
对于斐波拉契经典问题,我们都非常熟悉,通过递推公式F(n) = F(n - ) + F(n - ),我们可以在线性时间内求出第n项F(n),现在考虑斐波拉契的加强版,我们要求的项数n的范围为int范围 ...
- 洛谷P1962 斐波那契数列 || P1349 广义斐波那契数列[矩阵乘法]
P1962 斐波那契数列 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数 ...
- 使用并行的方法计算斐波那契数列 (Fibonacci)
更新:我的同事Terry告诉我有一种矩阵运算的方式计算斐波那契数列,更适于并行.他还提供了利用TBB的parallel_reduce模板计算斐波那契数列的代码(在TBB示例代码的基础上修改得来,比原始 ...
- 求斐波那契数列的第n项
问题描述:斐波那契数列是这样的一个数列,1,1,2,3,5,8,..,即前两项都是1,后面每一项都是其前面两项的和. 现在要你求出该数列的第n项. 分析:该问题是一个经典的数列问题,相信大家在很多语言 ...
- 斐波那契数列 的两种实现方式(Java)
import java.util.Scanner; /* 斐波那契数列:0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ... 如果设F(n)为该数列的第n ...
随机推荐
- 标准运算符替代函数之operator模块
# 官网参考示例地址 https://docs.python.org/zh-cn/3/library/operator.html # operator模块提供了一套与python的内置的运算符对应的高 ...
- django时区相关说明
# naive time 从字面意思上理解,这是个"幼稚的时间",所以可以理解为它是个本地时间,不带时区信息,不能直接用于存储,如下 import datetime datetim ...
- 教你如何用Keepalived和HAproxy配置高可用 Kubernetes 集群
本文分享自华为云社区<使用 Keepalived 和 HAproxy 创建高可用 Kubernetes 集群>,作者:江晚正愁余. 高可用 Kubernetes 集群能够确保应用程序在运行 ...
- 02、NATS单节点部署
接下来,我们一起看看如何部署一个单节点的 nats 服务器,这样后续学习 nats 的功能和特性的时候,会更加的清晰,那我们一起看看如何部署单节点的nats服务,后面在学习如何部署集群版的 nats. ...
- Javascript之Object、Array
Object.keys 对象的键转化为数组 Object.values 对象的属性值转化为数组 Object.assign 对象的合并 Array.from() 伪数组对象的属性值转化为数组.类似 ...
- 树莓派修改根文件系统为f2fs
目录 前言 操作简述 我的实际操作步骤 1. 准备 2. 查看树莓派分区信息 3. 备份根分区 4. 格式化树莓派TF卡根分区为f2fs文件系统 5.恢复备份 前言 在TF卡.固态硬盘之类的nand存 ...
- 有了 ETL 数据神器 dbt,表数据秒变 NebulaGraph 中的图数据
本文搭配同主题分享视频阅读更佳,<多数据源的数据治理实践> 如果你装好某款数据库产品,比如:分布式图数据库 NebulaGrpah,跃跃欲试的第一步是不是就让它干活搞数据呢?好的,现在问题 ...
- git commit大文件后无法删除或撤回
可以使用版本回退的功能 先用git log 查看历史提交 用 git reset --soft 上面的编号 回退到历史提交的版本 再重新commit即可
- AOP+自定义注解实现权限校验-2022新项目
一.业务场景 当前本人参与开发的是一个业务中台系统,所谓的中台简单的理解就是把相同的功能给抽取出来.比如系统A.B.C.D都需要进行用户登录操作,那么可以把用户信息管理这一块抽取出来为一个独立的系统E ...
- 基于ads1299生物电信号采集研发总结之参考信号的接法
一 概念 ads1299的电极端有两种采集方式,单端和差分.两种的使用方式又有很大的区别,怎么高质量的采集信号,这个是一个比较难的问题. 二 解析 参考信号SRB1的接法,决定了采集到数据的精确度和信 ...