51nod 1643 小Q的家庭作业
题意:
f(n) = sigma(gcd(i,n)) 1 <= i <= n
g(n) = sigma(f(d)) d | n
n = x1 * x2 * ... * xm
其中 x[i+1] = (a * x[i] + b) % c + 1
1 <= m <= 10^18
1 <= c <= 10^7
1 <= x[1],a,b <= c
首先,发现f,g函数都是积性函数
并且推下公式:g[n] = n * (k1 + 1 ) * (k2 + 1) * ...
n = p1^k1 * p2^k2 * ....
复杂度O(c) = O(10^7)
公式很容易推,这道题主要是空间太少了,开了数组最后都只能去掉,一个数组使用多次
然后时限也很紧,1300ms,用C++11交了好几发,一直是1400ms左右,改为C++交就1062ms了,
这个要注意
还有个地方,+0LL 被我打成 +1LL,还一直没有发现,wa了好多发。。
代码:
//File Name: nod1643.cpp
//Author: long
//Mail: 736726758@qq.com
//Created Time: 2016年12月22日 星期四 17时15分27秒 #include <bits/stdc++.h>
#define LL long long
const int MAXN = + ;
const int N = + ;
const int P = (int)1e9 + ;
int fir[MAXN],prime[MAXN],num[MAXN];
LL g,m,x,a,b,c;
int tot,C;
LL qp(LL x,LL y){
LL res = ;
for(;y>;y>>=){
if(y & ){
res = res * x;
if(res >= P)
res %= P;
}
x = x * x;
if(x >= P) x %= P;
}
return res;
}
void init(){
memset(fir,-,sizeof(fir));
tot = ;
for(int i=,j;i<MAXN;++i){
if(fir[i] == -){
prime[tot++] = i;
fir[i] = tot - ;
}
for(j=;j<tot;++j){
if((LL)i * prime[j] >= MAXN) break;
fir[i * prime[j]] = j;
if(i % prime[j] == ) break;
}
}
}
void cal_num(){
// memset(prime,0,sizeof(prime));
prime[x] = ,num[x] = ,fir[] = x;
C = x;
g *= x;
LL l = ,r = ,len = ;
for(LL i=;i<=m;++i){
x = (a * x + b) % c + ;
if(x > C) C = x;
// printf("i = %d x = %lld\n",i,x);
if(!prime[x]){
++num[x];
prime[x] = i;
fir[i] = x;
g = g * x;
if(g >= P) g %= P;
}
else{
l = prime[x],r = i;
len = r - l;
break;
}
}
if(r){
int rest = (m - r + ) % len + l - ;
LL dive = (m - r + ) / len;
LL u = ,v = ,w = dive % P,tmp;
for(LL i=l,now;i<r;++i){
now = w;
v = fir[i];
u = u * v;
if(u >= P) u %= P;
if(i <= rest){
++now;
g = g * v;
if(g >= P) g %= P;
}
tmp = num[v] + now;
if(tmp >= P) tmp -= P;
num[v] = tmp;
}
g = g * qp(u,dive);
if(g >= P) g %= P;
}
}
void cal_sum(LL c){
for(LL i=c,id,p,u;i>;--i){
if(!num[i]) continue;
if(prime[fir[i]] == i){
g = g * (num[i] + 1LL);
if(g >= P) g %= P;
}
else{
id = fir[i];
p = prime[id];
u = num[p] + num[i];
if(u >= P) u -= P;
num[p] = u;
u = num[i / p] + num[i];
if(u >= P) u -= P;
num[i / p] = u;
}
}
}
void solve(){
g = ;
cal_num();
init();
cal_sum(C);
}
int main(){
scanf("%lld %lld %lld %lld %lld",&m,&x,&a,&b,&c);
solve();
printf("%lld\n",g);
return ;
}
51nod 1643 小Q的家庭作业的更多相关文章
- 51Nod 欢乐手速场1 C 开心的小Q[莫比乌斯函数]
开心的小Q tangjz (命题人) quailty (测试) 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个数字存在一个约数是完全平方数,那么小Q就认为这个数是有趣的 ...
- BZOJ4018: 小Q的幻想之乡
Description 背景 有一天,小Q梦见自己来到了理想国的幻想之乡. 描述 有一天,小Q梦见自己来到了理想国的幻想之乡.幻想乡有无穷户居民,第i个家庭住在编号为i的房屋里,编号从1开始,到正无穷 ...
- 51nod 1471 小S的兴趣 | 分块 链表
51nod 1471 小S的兴趣 题面 小S喜欢有趣的事.但是,每个人的兴趣都是独特的.小S热衷于自问自答.有一天,小S想出了一个问题. 有一个包含n个正整数的数组a和针对这个数组的几个问题.这些问题 ...
- 平面直接坐标系线段相交问题(小Q(钟神)的问题)
[问题描述] 小 Q 对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目:首先,小 Q 会在?轴正半轴和?轴正半轴分别挑选?个点.随后,他将 ...
- 深入理解计算机系统家庭作业汇总 20135301&&20135328
深入理解计算机系统家庭作业 深入理解计算机系统第二章家庭作业 题目2.64 题目要求 判断二进制数偶数位是否有任意一位位为1,有的话返回1,否则返回0 解题过程 int any_even_one(un ...
- hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)
小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)T ...
- HD4505小Q系列故事——电梯里的爱情
Problem Description 细心的同事发现,小Q最近喜欢乘电梯上上下下,究其原因,也许只有小Q自己知道:在电梯里经常可以遇到他心中的女神HR. 电梯其实是个很暧昧的地方,只有在电梯里,小Q ...
- hdu4505小Q系列故事——电梯里的爱情
小Q系列故事——电梯里的爱情 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tota ...
- HDU-4515 小Q系列故事——世界上最遥远的距离
小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) ...
随机推荐
- Django1.3 创建项目
经历了各种失败各种烦恼以后Django开发环境终于搭建好了! 系统环境:ubuntu12.04 Django版本1.3.1 Python版本 2.7.3 接下来就兴建一个项目练习一下 1.创 ...
- 易图软件之EaseMap Desktop 1.0发布
概述 易图软件之EaseMap Desktop 1.0是一款基于arcgis runtime for wpf开发的地图编辑软件. 软件代码编写历时1个月终于完成. 目前这个版本的功能包括: 地图基本操 ...
- Linux手动释放缓存的方法
Linux释放内存的命令:syncecho 1 > /proc/sys/vm/drop_caches drop_caches的值可以是0-3之间的数字,代表不同的含义:0:不释放(系统默认值)1 ...
- go语言的 数组、slice、map使用(转)
golang群 点击加入 go语言的 数组.slice.map使用, 由于网上有很好的说明, 不需要再写了,请看这几篇: Go语言中的 Array, Slice和 Map 深入学习golang五篇,以 ...
- 解析C#开发过程常见的编程模式
单例模式: 在多线程的程序开发过程中经常会遇到单例模式[单件模式],它的特点是不是根据客户程序的调用而生成新的实例,而是控制某个类型的实例数量只有一个.也就是说,单例模式就是保证在整个应用程序的生命周 ...
- mvc3 上传图片
这是在Control里使用的代码,是在后台管理需要上传图片时使用的,不过我在这犯了一个错误, Request.Files[inputName];inputName名字中的大小写<input ty ...
- 基于云计算Iaas平台的ZStack
2015年4月,一家全新的基础架构即服务的软件产品ZStack面世.ZStack的主创人员是自在海外云计算公司的中国人.ZStack是基于Java语言,结合了OpenStack和CloudStack上 ...
- php实现的笛卡儿积
之前在网上找到一个大牛写的版本(网址已经记不得了..),如下 function Descartes1() { //Cartesian product of arrays or strings or s ...
- IntelliJ IDEA 工具常用快捷键
IntelliJ IDEA是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智能代码助手.代码自动提示.重构.J2EE支持.各类版本工具(git.svn.g ...
- ActiveMQ的初夜
Producer Flow Control mq自己实现了Flow Control(流量控制,默认开启),在mq的版本中,4.x和5.x流量控制实现原理并不相同,前者通过 TCP Flow Contr ...