BZOJ_2813_奇妙的Fibonacci_线性筛
BZOJ_2813_奇妙的Fibonacci_线性筛
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
结论:(fn,fm)=f(n,m)
证明直接上图片:

然后好办了。
fj|fi
(fi,fj)=fj
f(i,j)=fj
(i,j)=j 或 (i,j)=1且j=2。
线筛约数的平方之和,后面那个特判即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cmath>
using namespace std;
typedef long long ll;
#define mod 1000000007
#define N 10000050
#define M 10000000
int prime[N],cnt,cs[N],ys[N];
ll pf[N];
bool vis[N];
void init() {
ll i,j; ys[1]=pf[1]=1;
for(i=2;i<=M;i++) {
if(!vis[i]) {
prime[++cnt]=i,cs[i]=i,ys[i]=2,pf[i]=(ll(i)*i+1)%mod;
for(j=i*i;j<=M;j*=i) {
ys[j]=ys[j/i]+1;
pf[j]=(pf[j/i]+j*j)%mod;
}
}
for(j=1;j<=cnt&&i*prime[j]<=M;j++) {
int y=i*prime[j];
vis[y]=1;
if(i%prime[j]==0) {
cs[y]=cs[i]*prime[j];
if(i!=cs[i]) {
pf[y]=pf[i/cs[i]]*pf[prime[j]*cs[i]]%mod;
ys[y]=ys[i/cs[i]]*ys[prime[j]*cs[i]];
}
break;
}
cs[y]=prime[j];
pf[y]=pf[i]*pf[prime[j]]%mod;
ys[y]=ys[i]*ys[prime[j]];
}
}
}
int main() {
init();
ll Q,A,B,C;
int n;
ll ans1=0,ans2=0;
scanf("%d%lld%lld%lld%lld",&n,&Q,&A,&B,&C);
A%=C; B%=C;
while(n--) {
// printf("%d %lld\n",ys[Q],pf[Q]);
ans1+=ys[Q]+(Q&1); if(ans1>=mod) ans1-=mod;
ans2+=pf[Q]+(Q&1)*4; if(ans2>=mod) ans2-=mod;
Q=(Q*A+B)%C+1;
}
printf("%lld\n%lld\n",ans1,ans2);
}
BZOJ_2813_奇妙的Fibonacci_线性筛的更多相关文章
- 【bzoj2813】 奇妙的Fibonacci数列 线性筛
Description Fibonacci数列是这样一个数列: F1 = 1, F2 = 1, F3 = 2 . . . Fi = Fi-1 + Fi-2 (当 i >= 3) pty忽然对这个 ...
- bzoj2693--莫比乌斯反演+积性函数线性筛
推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...
- BZOJ 2693: jzptab [莫比乌斯反演 线性筛]
2693: jzptab Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1194 Solved: 455[Submit][Status][Discu ...
- BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】
2818: Gcd Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 4436 Solved: 1957[Submit][Status][Discuss ...
- 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 726 Solved: 309[Submit][Status ...
- 洛谷P3383 【模板】线性筛素数
P3383 [模板]线性筛素数 256通过 579提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 Too many or Too few lines 样例解释有问题 ...
- 【BZOJ-4407】于神之怒加强版 莫比乌斯反演 + 线性筛
4407: 于神之怒加强版 Time Limit: 80 Sec Memory Limit: 512 MBSubmit: 241 Solved: 119[Submit][Status][Discu ...
- BZOJ-2186 沙拉公主的困惑 线性筛(筛筛筛)+线性推逆元
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MB Submit: 2417 Solved: 803 [Submit][St ...
- Bzoj 2186: [Sdoi2008]沙拉公主的困惑 乘法逆元,线性筛,欧拉函数,数论
2186: [Sdoi2008]沙拉公主的困惑 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2560 Solved: 857[Submit][St ...
随机推荐
- ubuntu在terminal下安装mysql
安装的时候.仅仅须要在terminal中输入下面几条命令 1.sudo apt-get install mysql-server 2.apt-get isntall mysql-client 3. s ...
- java集合归纳
学习自: http://android.blog.51cto.com/268543/400557/ MAP Collection 堆栈队列操作尽可能考虑 linkedlist 多线程同步操作尽可能考虑 ...
- linux uart驱动——uart platfrom 注册(三)
一:注册platform device 注册一个platfrom device一般需要初始化两个内容,设备占用的资源resource和设备私有数据dev.platfrom_data.设备的resour ...
- 小tip: DOM appendHTML实现及insertAdjacentHTML
一.无人不识君 据说今天是邓丽君奶奶会见马克思的日子,所谓“无人不识君”就多了份“无人不识邓丽君”之意. JS中有很多基本DOM方法,例如createElement, parentNode等,其中,a ...
- OrCAD Capture出现丢失cdn_sfl401as.dll问题
昨天晚上我PCB图的时候还用OrCAD这个组件来着呢.但是还是好好的.但是今天当我再次启动程序的时候就出现了以下的对话框. 当时就吓了好一跳.好好软件怎么突然就不行了呢?先说说我出现这个问题之后的内心 ...
- Appium python Uiautomator2 多进程问题
appium更新uiautomator后可以获取tost了,大家都尝试,课程中也讲解了,但是这些跑的时候都在单机上,当我们多机并发的时候会出现一个端口问题,因为我们appium最后会调用uiautom ...
- 01 redis特点及安装使用
一:redis的特点 ()redis是一个开源,BSD许可高级的key-value存储系统.可以用来存储字符串,哈希结构,链表,集合,因此,常用来提供数据结构服务. 二:redis和memcached ...
- scrollview gridview
package com.fangdamai.salewinner.ui.customer; import android.content.Context;import android.content. ...
- [转]C#中的结构体与类的区别
C#中的结构体与类的区别 经常听到有朋友在讨论C#中的结构与类有什么区别.正好这几日闲来无事,自己总结一下,希望大家指点. 1. 首先是语法定义上的区别啦,这个就不用多说了.定义类使用关键字cla ...
- 流畅python学习笔记第十八章:使用asyncio包处理并发(二)
前面介绍了asyncio的用法.下面我们来看下如何用协程的方式来实现之前的旋转指针的方法 @asyncio.coroutine def spin(msg): write,flush=sys.stdou ...