洛谷3768:简单的数学题——题解

https://www.luogu.org/problemnew/show/P3768

题面来自洛谷,因为没用markdown所以直接截的图。

剩余的图是我用markdown写完然后截的图。

参考洛谷第一篇题解。

这个式子直观感受就需要莫比乌斯反演,大致的过程参考:BZOJ2693:jzptab

那么跳过暴力推式子,我们能够得到:

(如果你疑问为什么是miu(k/d)而不是miu(d),其实二者皆可,但是为什么这么干请往下看)

显然可以分块O(sqrt(n))做,那么后面的那一串东西怎么做呢?

参考jzptab的想法的话我们知道后面的式子是积性函数可以O(n)筛出来。

emmm……虽然时间可能能过但是你空间也存不下啊,所以我们要舍弃这个想法。

我们有这样的式子:

于是我们可以把后面的式子转换成这个,那么就变成了:

phi的前缀和可以杜教筛做,k^2也是分块求和。

具体的杜教筛式子可以看:http://blog.csdn.net/samjia2000/article/details/70147436

#include<cstdio>
#include<queue>
#include<map>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=4700050;
ll su[N],phi[N],sum[N],n,p,inv2,inv6;
bool he[N];
ll maxn=4700000;
map<ll,ll>mp;
inline ll s2(ll x){x%=p;return x*(x+1)%p*inv2%p;}
inline ll s3(ll x){x%=p;return x*(x+1)%p*(2*x+1)%p*inv6%p;}
inline ll sqr(ll x){x%=p;return x*x%p;}
ll pow(ll x,ll y){
    ll res=1;
    while(y){
    if(y&1)res=res*x%p;
    x=x*x%p;
    y>>=1;
    }
    return res;
}
void Euler(int n){
    int tot=0;
    phi[1]=1;he[1]=1;
    for(int i=2;i<=n;i++){
    if(!he[i]){
        su[++tot]=i;
        phi[i]=i-1;
    }
    for(int j=1;j<=tot;j++){
        if(i*su[j]>n)break;
        he[i*su[j]]=1;
        if(i%su[j]==0){
        phi[i*su[j]]=phi[i]*su[j]%p;
        break;
        }
        else phi[i*su[j]]=phi[i]*phi[su[j]]%p;
    }
    }
    for(int i=1;i<=n;i++){
    phi[i]=(phi[i-1]+phi[i]*sqr(i)%p)%p;
    }
    return;
}
ll f(ll x){
    if(x<=maxn)return phi[x];
    if(mp[x])return mp[x];
    ll res=sqr(s2(x));
    for(ll i=2,j;i<=x;i=j+1){
    j=x/(x/i);
    res-=f(x/i)*(s3(j)-s3(i-1))%p;
    res%=p;
    }
    return mp[x]=(res+p)%p;

}
int main(){
    scanf("%lld%lld",&p,&n);
    inv2=pow(2,p-2);inv6=pow(6,p-2);
    maxn=min(maxn,n);
    Euler(maxn);
    ll ans=0;
    for(ll i=1,j;i<=n;i=j+1){
    j=n/(n/i);
    ans+=(f(j)-f(i-1))%p*sqr(s2(n/i))%p;
    ans%=p;
    }
    printf("%lld\n",(ans+p)%p);
    return 0;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/+

+++++++++++++++++++++++++++++++++++++++++++

原文地址:https://www.cnblogs.com/luyouqi233/p/8611961.html

时间: 2024-10-11 04:43:23

洛谷3768:简单的数学题——题解的相关文章

洛谷 P2801 教主的魔法 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=2801 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是不超过1000的正整数.教主的魔法每次可以把闭区间[L, R](1≤L≤R≤N)内的英雄的身高全部加上一个整数W.(虽然L=R时并不

【基础练习】【背包DP】洛谷1164 小A点菜题解

洛谷的题目又有那令人···的悲剧格式= = 洛谷1164 小A点菜 本题地址:http://www.luogu.org/problem/show?pid=1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家--餐馆,很低端的那种. uim指着墙上的价目表(太低级了没有菜单),说:"随便点". 题目描述 不过uim由于买了一些辅(e)辅(ro)书,口袋里只剩M元(M<=10000). 餐馆虽低端,但是菜品种类不少,有N种(N<=100),第i种

洛谷3953:逛公园——题解

https://www.luogu.org/problemnew/show/P3953 策策同学特别喜欢逛公园.公园可以看成一张n个点m条边构成的有向图,且没有自环和重边.其中1号点是公园的入口,n号点是公园的出口,每条边有一个非负权值,代表策策经过这条边所要花的时间. 策策每天都会去逛公园,他总是从1号点进去,从n号点出来. 策策喜欢新鲜的事物,他不希望有两天逛公园的路线完全一样,同时策策还是一个特别热爱学习的好孩子,他不希望每天在逛公园这件事上花费太多的时间.如果1号点到n号点的最短路长为d

洛谷 P1106 删数问题 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1106 题目描述 键盘输入一个高精度的正整数N,去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N和k,寻找一种方案使得剩下的数字组成的新数最小. 输出应包括所去掉的数字的位置和组成的新的正整数.(N不超过250位) 输入数据均不需判错. 输入输出格式 输入格式: n (高精度的正整数) k (需要删除的数字

【日常学习】【背包DP(完全背包)】洛谷1616 疯狂的采药题解

这是一道典型的完全背包题目 先上题目···于是又要迎来洛谷那令人不知道说什么的霸气摘要··· 洛谷1616 疯狂的采药 本题地址:http://www.luogu.org/problem/show?pid=1616 题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山洞

洛谷 P1022 计算器的改良 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=1022 题目背景 NCL是一家专门从事计算器改良与升级的实验室,最近该实验室收到了某公司所委托的一个任务:需要在该公司某型号的计算器上加上解一元一次方程的功能.实验室将这个任务交给了一个刚进入的新手ZL先生. 题目描述 为了很好的完成这个任务,ZL先生首先研究了一些一元一次方程的实例: 4+3x=8 6a-5+1=2-2a -5+12y=

[NOIP提高&amp;洛谷P1024]一元三次方程求解 题解(二分答案)

[NOIP提高&洛谷P1024]一元三次方程求解 Description 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与根之差的绝对值>=1.要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位. 提示:记方程f(x)=0,若存在2个数x1和x2,且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定

【日常学习】【搜索/排序+字符串】洛谷1012/1107 最大整数题解

转载请注明出处 [ametake版权全部]http://blog.csdn.net/ametake欢迎来看 洛谷1107 最大整数 本题地址:http://www.luogu.org/problem/show?pid=1107 题目描写叙述 设有n个正整数 (n<=20), 将它们连接成一排,  组成一个最大的多位整数. 比如: n=3时, 3个整数13, 312, 343连接成的最大整数为: 34331213 又如: n=4时, 4个整数7,13,4,246连接成的最大整数为: 7424613

洛谷 P3741 honoka的键盘 题解

此文为博主原创题解,转载时请通知博主,并把原文链接放在正文醒目位置. 题目链接:https://www.luogu.org/problem/show?pid=3741 题目背景 honoka 有一个只有两个键的键盘. 题目描述 一天,她打出了一个只有这两个字符的字符串.当这个字符串里含有"VK"这个字符串的时候,honoka 就特别喜欢这个字符串.所以,她想改变至多一个字符(或者不做任何改变)来最大化这个字符串内"VK"出现的次数.给出原来的字符串,请计算她最多能使