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) ...
随机推荐
- Kmeans++算是DONet实现
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...
- 一款基于bootstrap的datetimepicker
<!DOCTYPE HTML> <html> <head> <link href="http://netdna.bootstrapcdn.com/t ...
- [转]Jenkins使用 管理节点
现在我们已经搭建好了基本的Jenkins环境,在这一集里,我们说一说如何管理节点. 进入“系统管理”中的“管理节点”. 创建Windos系统的奴隶节点 先创建一台安装了Win7系统的虚拟机,作为Jen ...
- UI控件
1.布局:一个Activity相当于一个手机屏幕默认和手机屏幕的宽高相同LinearLayout.RelativeLayout等布局继承了ViewGroup,ViewGroup是View的子类,可以容 ...
- Project Woosah Tu (五色土)
I bought this Raspberry Pi (model B) in spring 2013, I hadn't done too much with it except for some ...
- iOS页面传值-wang
iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例) 实现了以下iOS页面间传值:1.委托delegate方式:2.通知notific ...
- Oracle执行时间与sql格式
今天碰到一个很奇怪的问题,直接在eclipse中将sql拷出,然后直接粘贴复制在数据库中就会执行的非常慢,但是在利用plsql对sql语句进行格式整理之后,执行的速度就非常的快,之后我where条件中 ...
- JSON数据;
1.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 2.JSON的规则很简单: 对象是一个无序的“‘名称/值'对”集合.一个对象以“{”(左括号)开始, ...
- linux计划任务
一.单一计划任务 安装at: # yum -y install at 启动: # /etc/init.d/atd start 查看是否运行: # ps aux | grep atd 创建计划 # at ...
- Dubbo框架
1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...