题意:

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的家庭作业的更多相关文章

  1. 51Nod 欢乐手速场1 C 开心的小Q[莫比乌斯函数]

    开心的小Q tangjz (命题人) quailty (测试)   基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个数字存在一个约数是完全平方数,那么小Q就认为这个数是有趣的 ...

  2. BZOJ4018: 小Q的幻想之乡

    Description 背景 有一天,小Q梦见自己来到了理想国的幻想之乡. 描述 有一天,小Q梦见自己来到了理想国的幻想之乡.幻想乡有无穷户居民,第i个家庭住在编号为i的房屋里,编号从1开始,到正无穷 ...

  3. 51nod 1471 小S的兴趣 | 分块 链表

    51nod 1471 小S的兴趣 题面 小S喜欢有趣的事.但是,每个人的兴趣都是独特的.小S热衷于自问自答.有一天,小S想出了一个问题. 有一个包含n个正整数的数组a和针对这个数组的几个问题.这些问题 ...

  4. 平面直接坐标系线段相交问题(小Q(钟神)的问题)

    [问题描述] 小 Q 对计算几何有着浓厚的兴趣.他经常对着平面直角坐标系发呆,思考一些有趣的问题.今天,他想到了一个十分有意思的题目:首先,小 Q 会在?轴正半轴和?轴正半轴分别挑选?个点.随后,他将 ...

  5. 深入理解计算机系统家庭作业汇总 20135301&&20135328

    深入理解计算机系统家庭作业 深入理解计算机系统第二章家庭作业 题目2.64 题目要求 判断二进制数偶数位是否有任意一位位为1,有的话返回1,否则返回0 解题过程 int any_even_one(un ...

  6. hdu---(4515)小Q系列故事——世界上最遥远的距离(模拟题)

    小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)T ...

  7. HD4505小Q系列故事——电梯里的爱情

    Problem Description 细心的同事发现,小Q最近喜欢乘电梯上上下下,究其原因,也许只有小Q自己知道:在电梯里经常可以遇到他心中的女神HR. 电梯其实是个很暧昧的地方,只有在电梯里,小Q ...

  8. hdu4505小Q系列故事——电梯里的爱情

    小Q系列故事——电梯里的爱情 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tota ...

  9. HDU-4515 小Q系列故事——世界上最遥远的距离

    小Q系列故事——世界上最遥远的距离 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...

随机推荐

  1. Kmeans++算是DONet实现

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  2. 一款基于bootstrap的datetimepicker

    <!DOCTYPE HTML> <html> <head> <link href="http://netdna.bootstrapcdn.com/t ...

  3. [转]Jenkins使用 管理节点

    现在我们已经搭建好了基本的Jenkins环境,在这一集里,我们说一说如何管理节点. 进入“系统管理”中的“管理节点”. 创建Windos系统的奴隶节点 先创建一台安装了Win7系统的虚拟机,作为Jen ...

  4. UI控件

    1.布局:一个Activity相当于一个手机屏幕默认和手机屏幕的宽高相同LinearLayout.RelativeLayout等布局继承了ViewGroup,ViewGroup是View的子类,可以容 ...

  5. Project Woosah Tu (五色土)

    I bought this Raspberry Pi (model B) in spring 2013, I hadn't done too much with it except for some ...

  6. iOS页面传值-wang

    iOS页面间传值的方式(NSUserDefault/Delegate/NSNotification/Block/单例) 实现了以下iOS页面间传值:1.委托delegate方式:2.通知notific ...

  7. Oracle执行时间与sql格式

    今天碰到一个很奇怪的问题,直接在eclipse中将sql拷出,然后直接粘贴复制在数据库中就会执行的非常慢,但是在利用plsql对sql语句进行格式整理之后,执行的速度就非常的快,之后我where条件中 ...

  8. JSON数据;

    1.JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 2.JSON的规则很简单: 对象是一个无序的“‘名称/值'对”集合.一个对象以“{”(左括号)开始, ...

  9. linux计划任务

    一.单一计划任务 安装at: # yum -y install at 启动: # /etc/init.d/atd start 查看是否运行: # ps aux | grep atd 创建计划 # at ...

  10. Dubbo框架

    1. Dubbo是什么? Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案.简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需 ...