【bzoj2813】 奇妙的Fibonacci数列 线性筛
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 <= 3*10^6,C <= 10^7,A <= 10^7,B <= 10^7,1 <= Q1<= C
Sol
首先我们有\((F_i,F_j)=F_{(i,j)}\)我不会证qwq
我们钦定\(F_i\)之后,如果\((F_i,F_j)=F_j\)那么\(F_j\)就能够整除\(F_i\)。
等价于\((i,j)=j\)
显然\(i\)的约数全部满足这一性质。
所以我们实际要求的是每个数字的约数个数和和约数平方和。
我们设e[i]为i的最小质因数次数,d[i]为i除去最小质因子之后的商,g[i]为i的约数个数,f[i]为i的约数平方和 。
那么在线性筛时:
质数:e[i]=1,d[i]=1,g[i]=2,f[i]=i^2+1;
记k=i*pri[j];
i%pri[j]==0:e[k]=e[i]+1,d[k]=d[i],g[k]=g[i]/(e[i]+1)*(e[k]+1),f[k]=f[i]*pri[j]^2+f[d[i]];
i%pri[j]!=0:e[k]=1,d[k]=i,g[k]=g[i]*2,f[k]=f[i]*(pri[j]^2+1);
e,d,g的表达式很好理解,f的第一个式子含义是把这个质因子次数+1时,除了这个最小质因子以外的因子平方和都不变,新产生的因数的平方和要乘以这个质因子。f的第二个式子含义是新产生的因数的平方和加上原来的平方和。
要注意f[2]=1,所以如果x是奇数,没有算入贡献,要特判。
Code
#include <cstdio>
int i,T,x,a,b,c,t,d[10000005],e[10000005],f[10000005],g[10000005],p[10000005],v[10000005],sg,sf,P=1000000007;
int main()
{
for(g[1]=f[1]=1,i=2;i<=10000000;i++)
{
if(!v[i]){p[++t]=i;e[i]=d[i]=1;g[i]=2;f[i]=(1ll*i*i+1)%P;}
for(int j=1,k;j<=t&&(k=i*p[j])<=10000000;j++)
{
v[k]=1;
if(i%p[j]==0)
{
e[k]=e[i]+1;g[k]=g[i]/(e[i]+1)*(e[k]+1);d[k]=d[i];f[k]=(1ll*f[i]*p[j]%P*p[j]%P+f[d[i]])%P;
break;
}
else e[k]=1,d[k]=i,g[k]=g[i]<<1,f[k]=f[i]*(1ll*p[j]*p[j]%P+1)%P;
}
}
for(scanf("%d%d%d%d%d",&T,&x,&a,&b,&c),a%=c,b%=c;T--;x=(1ll*x*a+b)%c+1)
{
sg+=g[x]+(x&1);sf+=f[x]+4*(x&1);
if(sg>=P) sg-=P;if(sf>=P) sf-=P;
}
printf("%d\n%d\n",sg,sf);
}
【bzoj2813】 奇妙的Fibonacci数列 线性筛的更多相关文章
- bzoj千题计划204:bzoj2813: 奇妙的Fibonacci
http://www.lydsy.com/JudgeOnline/problem.php?id=2813 若j能整除i,则f[j]能整除f[i] 题目就变成了求约数个数和.约数的平方和 http:// ...
- BZOJ_2813_奇妙的Fibonacci_线性筛
BZOJ_2813_奇妙的Fibonacci_线性筛 Description Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + ...
- 【BZOJ2813】奇妙的Fibonacci
Description Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + Fi-2 (当 i >= 3) pty忽 ...
- BZOJ 2813: 奇妙的Fibonacci
2813: 奇妙的Fibonacci Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 497 Solved: 134[Submit][Status][ ...
- 关于奇妙的 Fibonacci 的一些说明
奇妙的 Fibonacci,多次模拟赛中出现 同时也是 BZOJ 2813 一 Fibonacci 的 GCD 如果 \(F\) 是 Fibonacci 数列,那么众所周知的有 \(\gcd(F_i, ...
- fibonacci数列-斐波那契数列-python编程
未完待续~ 了解fibonacci数列: 斐波纳契数列(Fibonacci Sequence),又称黄金分割数列. 1,1,2,3,5,8,13,21,34,55,89,144,233,377,610 ...
- 数学归纳法·Fibonacci数列
数学归纳法 我们先来看一个例子: 我们让多诺米骨牌倒下的充要条件是: 第一块骨牌倒下: 假设当当前块骨牌倒下时,则他的后面一块也会倒下. 我们把这个例子给抽象出来就可以得到数学归纳法的证明过程: [第 ...
- Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论
题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ...
- bzoj2693--莫比乌斯反演+积性函数线性筛
推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...
随机推荐
- Python遍历列表删除多个列表元素
在遍历list的时候,删除符合条件的数据,结果不符合预期 num_list = [1, 2, 2, 2, 3] print(num_list) for item in num_list: if ite ...
- EXT.net 窗体传值
ext.net 窗体传值 EXT.net 窗体传值 子窗体代码 protected void btnClose_Click(object sender,EventArges e) { PageCont ...
- MySQL中TRUNCATE和ROUND函数的用法
一.TRUNCATE(expr, int_expr)用法 TRUNCATE函数将expr按照int_expr长度在小数点后按照位数直接进行截取. 实例: ); 输出结果:200.1256 二.ROUN ...
- Uboot详细解析2
1.第二阶段的主线函数位于u-boot-2010.06/arch/arm/lib/board.c. 第二阶段的功能: <1> 初始化本阶段要使用到的硬件设备. 设置时钟.初始化串口. bo ...
- ubuntu 14.04 安装压缩包版mysql
既有环境: 1)下载MySQL Community Server 5.6.17 压缩版(mysql-5.6.17-linux-glibc2.5-x86_64.tar.gz) 2)安装目录: /opt/ ...
- 服务器发送邮件出现Could not connect to SMTP host错误 解决办法
服务器发送邮件出现Could not connect to SMTP host错误 解决办法 功夫不负有心人,最后了解到,除了google的smtp服务器收到请求“smtp”会接受,其他服务器比如qq ...
- 【光速使用开源框架系列】数据库框架OrmLite
[关于本系列] 最近看了不少开源框架,网上的资料也非常多,但是我认为了解一个框架最好的方法就是实际使用.本系列博文就是带领大家快速的上手一些常用的开源框架,体会到其作用. 由于作者水平有限,本系列只会 ...
- c++ 多态问题(在虚函数里调用虚函数)
最近在看cocos2d-x的源码,非常感激cocos2d作者的开源精神.在看代码的过程中感觉两个方向让我受益,1.把之前从书中看到的c++知识,明白了怎么运用.2.学习作者驾驭代码的巧妙方法. 看co ...
- 微信内置浏览器中的cookie很诡异呀
微信内置浏览器中的cookie很诡异呀 这是设置和删除COOKIE的代码 function set_cookie($var ,$value = '' ,$expire = 0){ $path = '/ ...
- dpdk中kni模块
一,什么是kni,为什么要有kni Kni(Kernel NIC Interface)内核网卡接口,是DPDK允许用户态和内核态交换报文的解决方案,模拟了一个虚拟的网口,提供dpdk的应用程序和lin ...