洛谷 P3768 简单的数学题
https://www.luogu.org/problemnew/show/P3768
化简一下式子,就是$\sum_{d=1}^ncalc(d)d^2\varphi(d)$
其中$calc(d)=\frac{({\lfloor}\frac{n}{d}{\rfloor}+1)^2{{\lfloor}\frac{n}{d}{\rfloor}}^2}{4}$
可以对calc(d)做整除分块,那么要求$d^2\varphi(d)$的前缀和
看一眼数据范围,大概要杜教筛
凑了一会,发现令$f(d)=d^2\varphi(d)$,$g(d)=d^2$,$h=f*g$,那么$h(n)=n^2\sum_{d|n}\varphi(d)=n^3$
(也就是说$id^3=id^2\varphi*id^2$,好神奇啊)
那么就好办了,$n^3$的前缀和是有公式的($1^3+2^3+..+n^3=(1+2+..+n)^2$)
杜教筛那个式子套一下就行了。。也可以预处理一点前缀和
复杂度?...不会算
以下是瞎扯:
设预处理1-K
算一次x,复杂度是$f(x)=\sum_{i=1}^{x/K}\sqrt{\frac{x}{i}}=O(\frac{x}{\sqrt{K}})$
后半部分复杂度是$\sum_{i=1}^{n/K}f(\frac{n}{i})=nK^{-\frac{1}{2}}\sum_{i=1}^{n/K}\frac{1}{i}=nK^{-\frac{1}{2}}log(n/K)$
总复杂度是$nK^{-\frac{1}{2}}log(n/K)+K$
当$K=n^{\frac{2}{3}}$时,复杂度是$n^{\frac{2}{3}}log$
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
#include<map>
using namespace std;
#define fi first
#define se second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
ll md;
ll H(ll n)
{
__int128 t=__int128(n+)*n/%md;
return t*t%md;
}
ll G(ll n)
{
return __int128(n)*(n+)*(*n+)/%md;
}
ll Mod(ll n,ll d=md)
{
if(n>=) return n%d;
else if(n%d==) return ;
else return d+n%d;
}
const ll K=;
ll HH[K+],prime[K+],len;
bool nprime[K+];
map<ll,ll> ma;
ll calc(ll n)
{
if(n<=K) return HH[n];
if(ma.count(n)) return ma[n];
ll i,j,ans=H(n);
for(i=;i<=n;i=j+)
{
j=n/(n/i);
ans=Mod(ans-Mod(G(j)-G(i-))*calc(n/i)%md);
}
return ma[n]=ans;
}
ll n;
ll X(ll d)
{
__int128 t=__int128(n/d+)*(n/d)/%md;
return t*t%md;
}
ll ans;
int main()
{
ll i,j;
//md=1000000007;
scanf("%lld%lld",&md,&n);
HH[]=;
for(i=;i<=K;i++)
{
if(!nprime[i]) {prime[++len]=i;HH[i]=i-;}
for(j=;j<=len&&i*prime[j]<=K;j++)
{
nprime[i*prime[j]]=;
if(i%prime[j]==)
{
HH[i*prime[j]]=HH[i]*prime[j];
break;
}
else
HH[i*prime[j]]=HH[i]*(prime[j]-);
}
}
for(i=;i<=K;i++) HH[i]=HH[i]*i%md*i%md;
for(i=;i<=K;i++) HH[i]=(HH[i-]+HH[i])%md;
// while(1)
// {
// scanf("%lld",&n);
// printf("%lld\n",calc(n));
// }
for(i=;i<=n;i=j+)
{
j=n/(n/i);
ans=(ans+X(i)*Mod(calc(j)-calc(i-))%md)%md;
}
printf("%lld",ans);
return ;
}
洛谷 P3768 简单的数学题的更多相关文章
- 洛谷 P3768 简单的数学题 解题报告
P3768 简单的数学题 题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数\(n\)和一个整数\(p,\)你需要求出\((\sum_{i=1}^n\sum_{j=1}^n ijgc ...
- 【刷题】洛谷 P3768 简单的数学题
题目描述 由于出题人懒得写背景了,题目还是简单一点好. 输入一个整数n和一个整数p,你需要求出(\(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p\),其中gcd ...
- 洛谷 - P3768 - 简单的数学题 - 欧拉函数 - 莫比乌斯反演
https://www.luogu.org/problemnew/show/P3768 \(F(n)=\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}ijgcd(i ...
- 洛谷P3768 简单的数学题
解: 神奇的一批......参观yyb巨神的博客. 大致思路就是第一步枚举gcd,发现后面有个限制是gcd=1,用反演,得到的F(x)是两个等差数列求积. 然后发现有个地方我们除法的除数是乘积,于是换 ...
- 洛谷P3768 简单的数学题(莫比乌斯反演+狄利克雷卷积+杜教筛)
传送门 不会…… 两篇加在一起都看不懂…… https://www.cnblogs.com/cellular-automaton/p/8241128.html https://www.luogu.or ...
- 洛谷P3768 简单的数学题 【莫比乌斯反演 + 杜教筛】
题目描述 求 \[\sum\limits_{i=1}^{n} \sum\limits_{j=1}^{n} i*j*gcd(i,j) \pmod{p}\] \(n<=10^{10}\),\(p\) ...
- 洛谷P3768 简单的数学题 莫比乌斯反演+杜教筛
题意简述 求出这个式子 \[ \sum_{i=1}^n\sum_{j=1}^n ij(i,j) \bmod p \] 做法 先用莫比乌斯反演拆一下式子 \[ \begin{split} \sum_{i ...
- 洛谷 P3768 简单的数学题 (莫比乌斯反演)
题意:求$(\sum_{i=1}^{n}\sum_{j=1}^{n}ijgcd(i,j))mod p$(p为质数,n<=1e10) 很显然,推式子. $\sum_{i=1}^{n}\sum_{j ...
- 洛谷P3768 简单的数学题解题报告
$$\begin{eqnarray}&\sum_{i=1}^{n}\sum_{j=1}^{n}ij\gcd(i,j)\\&\sum_{d=1}^{n}\sum_{i=1}^{n}\su ...
随机推荐
- mips-openwrt-linux-gcc test_usbsw.c -o usbsw 编译问题
mips-openwrt-linux-gcc: warning: environment variable 'STAGING_DIR' not defined mips-openwrt-linux ...
- td 中连续数字或连续英文内容不自动换行
原因: 把连续的英文当做成了一个单词. 解决: 加上 : word-break: break-all (允许单词内换行)
- miller_rabin模板
miller_rabin素数测试法 #include <iostream> #include <cstdlib> #include <stdio.h> #inclu ...
- pageHelper没有分页效果的问题
配置完全都没有问题 springboot pagehelper分页怎么都不管用 而且所有的信息记录全部都查出来了 解决方法: PageHelper.startPage(pageNum,pageSize ...
- codeforces 447C. DZY Loves Sequences 解题报告(446A)
题目链接:http://codeforces.com/problemset/problem/447/C 题目意思:给出 一个 包含 n 个数的序列你,从中需要找出这个序列的最长子串,满足在里面只修改其 ...
- Java经典算法大全
1.河内之塔.. 2.Algorithm Gossip: 费式数列. 3. 巴斯卡三角形 4.Algorithm Gossip: 三色棋 5.Algorithm Gossip: 老鼠走迷官(一) 6. ...
- ubuntu IP 扫描
/******************************************************************************* * ubuntu IP 扫描 * 说明 ...
- BZOJ_2683_简单题&&BZOJ_1176_[Balkan2007]Mokia_CDQ分治+树状数组
BZOJ_2683_简单题&&BZOJ_1176_[Balkan2007]Mokia_CDQ分治+树状数组 Description 维护一个W*W的矩阵,初始值均为S.每次操作可以增加 ...
- HNOI2008 GT考试 (KMP + 矩阵乘法)
传送门 这道题目的题意描述,通俗一点说就是这样:有一个长度为n的数字串(其中每一位都可以是0到9之间任意一个数字),给定一个长度为m的模式串,求有多少种情况,使得此模式串不为数字串的任意一个子串.结果 ...
- Android 开发:由模块化到组件化
在Android SDK一文中,我们谈到模块化和组件化,现在我们来聊聊组件化开发背后的哪些事.最早是在广告SDK中应用组件化,但是同样适用于普通应用开发 以下高能,请做好心理准备,看不懂请发私信来交流 ...