LOJ #6052. 「雅礼集训 2017 Day11」DIV

完了我是数学姿势越来越弱了,感觉这种CXRdalao秒掉的题我都要做好久


一些前置推导

首先我们很容易得出\((a+bi)(c+di)=k \Leftrightarrow ac-bd=k,ad+bc=0\)

我们可以直接\(ad+bc=0\Rightarrow ad=-bc\Rightarrow \frac{a}b=-\frac{c}{d}\)

考虑把这个分数化为最简的形式,那么就意味着我们要把\(\gcd\)拿出来

我们令\(\frac{a}b=\frac{p}{q}(\gcd(p,q)=1)\),那么\(\frac{c}d=-\frac{p}q\)

把这个代回去就有\(x(p+qi)\cdot q(p-qi)=k\)

然后直接把式子乘起来就有\(xy(p^2+q^2)=k\)

那么我们可以发现,如果\(p^2+q^2|k\),那么它就可以对答案产生贡献

然后考虑求贡献和,即所有是\(p^2+q^2\)倍数以及\(k\)的倍数的数的个数

假设这个数\(M=w(p^2+q^2)\),那么我们知道\(w|\frac{k}{p^2+q^2}\),可以列出贡献的式子:

\[\sum_{w|\frac{k}{p^2+q^2}} p\cdot w=p\cdot\sigma(\frac{k}{p^2+q^2})\]

然后我们枚举\(p,q\)后统计答案,发现不好维护,因此可以直接枚举\(t=p^2+q^2\),则原式等于:

\[\sum_t \sum_{\gcd(p,q)=1\&\&p^2+q^2=t} p\sum_{y|k} \sigma(\frac{k}t)\]

然后我们考虑简化这个式子,首先\(\sum_{y|k}\sigma(\frac{k}t)\)其实就是\(\sum_{i=1}^{\frac{n}t}\sigma i\)

所以我们记\(\sigma\)的前缀和为\(D\),然后为了方便把\(\sum_{\gcd(p,q)=1\&\&p^2+q^2=t} p\)设为\(F\),这样原式即为:

\[\sum_{d=1}^n F(d)\cdot D(\frac{n}d)\]

是我们熟悉的除法分块形式,所以考虑分别求出\(D,F\)的值,由于这里的数据范围比较大所以我们考虑用杜教筛


求解\(D\)

先讲比较简单的\(D\)的求解,首先如果是小范围我们可以直接用线性筛筛出单个的\(\sigma\)然后做前缀和

然后有一个很简单的结论,我们可以直接暴力枚举约数算个数,即:

\[D(n)=\sum_{i=1}^n\sigma(i)=\sum_{d=1}^n d\cdot\lfloor\frac{n}d\rfloor\]

这个直接除法分块一下,然后总体就是\(O(n^{\frac{2}3})\)


求解\(F\)

首先还是小范围答案,我们可以线性筛出素数的时候直接枚举\(p,q\)然后算贡献即可

我们考虑对\(F\)做前缀和,即令\(G(n)=\sum_{p^2+q^2\le n} p=\sum_{p=1}^{\lfloor\sqrt n\rfloor} p\cdot \lfloor \sqrt{n-p^2}\rfloor\)

考虑直接枚举\(\gcd(p,q)\),那么即有:

\[G(n)=\sum_{d\ge 1} d\cdot F(\lfloor\frac{n}{d^2}\rfloor)\]

根据杜教筛的套路,我们直接把\(d=1\)的情况提出来,那么就有:

\[G(n)=F(n)+\sum_{d\ge 2} d\cdot F(\lfloor\frac{n}{d^2}\rfloor)\]

即得到\(F(n)=G(n)-\sum_{d\ge 2} d\cdot F(\lfloor\frac{n}{d^2}\rfloor)\)

这里由于求解单个\(G\)\(\sqrt n\)的,因此总体复杂度还是\(n^{\frac{2}3}\)


综上,我们总算是把这道杜教筛的练手题做完了,然后我把一个\(x\)打成\(n\)调了一晚上233

CODE

#include<cstdio>
#include<map>
#include<cmath>
#define RI register int
#define CI const int&
using namespace std;
typedef long long LL;
const int N=5000000,mod=1004535809,inv2=502267905;
int prime[N+5],cnt,ans; bool vis[N+5];
LL n,ds[N+5],fs[N+5]; map <LL,int> _ds,_fs;
inline void inc(LL& x,const LL y)
{if ((x+=y)>=mod) x-=mod;
}
inline void inc(int& x,CI y)
{if ((x+=y)>=mod) x-=mod;
}
inline void dec(int& x,CI y)
{if ((x-=y)<0) x+=mod;
}
inline int sum(CI x,CI y)
{int t=x+y; return t>=mod?t-mod:t;
}
inline int sub(CI x,CI y)
{int t=x-y; return t<0?t+mod:t;
}
inline int gcd(CI x,CI y)
{return y?gcd(y,x%y):x;
}
inline int Sum(const LL& l,const LL& r)
{return ((l+r)%mod)*((r-l+1)%mod)%mod*inv2%mod;
}
#define Pi prime[j]
inline void init(CI n)
{RI i,j; ds[1]=vis[1]=1; for (i=2;i<=n;++i){if (!vis[i]) prime[++cnt]=i,ds[i]=i+1;for (j=1;j<=cnt&&i*Pi<=n;++j){vis[i*Pi]=1; if (i%Pi) ds[i*Pi]=ds[i]*(Pi+1);else { ds[i*Pi]=ds[i]*(Pi+1)-Pi*ds[i/Pi]; break; }}}for (i=1;i*i<=n;++i){int t=i*i; for (j=1;j*j+t<=n;++j) if (gcd(i,j)==1) fs[j*j+t]+=i;}for (i=1;i<=n;++i) ds[i]%=mod,fs[i]%=mod,inc(ds[i],ds[i-1]),inc(fs[i],fs[i-1]);
}
#undef Pi
inline int Ds(const LL& x)
{if (x<=N) return ds[x]; if (_ds.count(x)) return _ds[x]; int ret=0;for (LL l=1,r;l<=x;l=r+1) r=x/(x/l),inc(ret,1LL*Sum(l,r)*((x/r)%mod)%mod); return _ds[x]=ret;
}
inline int Fs(const LL& x)
{if (x<=N) return fs[x]; if (_fs.count(x)) return _fs[x]; int ret=0; register LL i; for (i=1;i*i<=x;++i) inc(ret,i*((LL)floor(sqrt(x-i*i))%mod)%mod);for (i=2;i*i<=x;++i) dec(ret,i*Fs(x/(i*i))%mod); return _fs[x]=ret;
}
int main()
{scanf("%lld",&n); init(N); for (LL l=1,r;l<=n;l=r+1)r=n/(n/l),inc(ans,1LL*sub(Fs(r),Fs(l-1))*Ds(n/l)%mod);return printf("%d",sum(sum(ans,ans),Ds(n))),0;
}

转载于:https://www.cnblogs.com/cjjsb/p/10738752.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/264193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

移动端页面不需要在meta加_移动端适配viewport缩放方案

1. 前言设计师交付给前端开发一张宽度为750px的视觉稿&#xff0c;设计稿上元素的尺寸、颜色、位置等已做过标注&#xff0c;要求工程师工在适配不同屏幕尺寸的设备时采用等比缩放的方案。采用viewport缩放的方案能又快又好的实现需求。2. 原理在写HTML、CSS对设计稿进行还原时…

(转)用 Fiddler 看看 UpdatePanel 发生了什么

第一个 ASP.NET AJAX 程序&#xff1a;UpdatePanel一文中介绍了 UpdatePanel 实现 Ajax&#xff0c;我们今天利用 Fiddler 来看看 UpdatePanel 发生了什么。 实验步骤 启动 Fiddler&#xff0c;访问我们事先写好的 UpdatePanel 网页&#xff08;注意不要用 127.0.0.1 或 localh…

转载:div和flash层级关系问题

转自&#xff1a;http://sin581.blog.163.com/blog/static/860578932012813112334404/问题&#xff1a;ie下默认好像div层级没有flash层级高&#xff0c;也就是当div绝对相对压在flash上&#xff0c;压不住flash总是在最上面显示&#xff0c;请给出方案 或者说下大概如何解决 用…

基于Google Reader发展起来的个性化推荐系统之三大问题

郑昀玩聚SR 20091003 中科院的xlvector(即项亮&#xff0c;他所在的团队The Ensemble在7月份获得Netflix大奖赛公开测试排名第一&#xff0c;但在9月22日Netflix宣布BPC获胜&#xff0c;原因据说只是因为项亮他们提交结果晚了20分钟)最近发布了一个小工具GRSuggest&#xff0c;…

直接从chrome中复制的body到postman中希望能自动识别去除空格

Describe the bug直接从chrome开发者工具中request的body复制到postman中时会带有空格&#xff0c;需要手动删除空格。 To Reproduce1、使用chrome开发者工具抓取一个post请求2、复制请求中参数3、粘贴到postman的body中 Expected behavior3、把带的空格删除掉 转载于:https://…

气象ts评分_给大家分享一个格点插值到站点然后TS评分的程序

登录后查看更多精彩内容~您需要 登录 才可以下载或查看&#xff0c;没有帐号&#xff1f;立即注册x!****************************************************************************!! PROGRAM: T639格点资料插值成站点资料!!**********************************************…

RichTextBox 右键显示 ContextMenuTrip

说明&#xff1a; (1)命名&#xff1a; RichTextBox -> rtxt1 ContextMenuTrip -> cms1 (2)截图&#xff1a; (3)完整代码&#xff1a; <span style"font-size:14px;">using System; using System.Collections.Generic; using System.ComponentModel; u…

设计模式学习笔记--Mediator 中介者模式

我们知道面向对象应用程序是由一组为了提供某种服务而彼此交互的对象组成。当彼此引用的对象数量比较少时&#xff0c;此时对象之间就为直接交互&#xff08;点对点)。而当对象的数量增加时&#xff0c;这种直接交互会导致对象之间复杂的、混乱的引用,最后形成一张巨大的网&…

Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验

vee-validate 是为 Vue.js 量身打造的表单校验框架&#xff0c;允许您校验输入的内容并显示对应的错误提示信息。它内置了很多常见的校验规则&#xff0c;可以组合使用多种校验规则&#xff0c;大部分场景只需要配置就能实现开箱即用&#xff0c;还支持自定义正则表达式。而且支…

python微博自动评论转发_python3 调用新浪微博api实现自动发布评论

新浪微博开放平台提供了丰富的API接口&#xff0c;利用这些接口&#xff0c;开发者能够开发出独具特色的微博应用。但是&#xff0c;大部分接口都需要用户授权给应用&#xff0c;应用利用授权得到的Access Token来调用相应的接口来获取内容。新浪微博的授权机制目前主要有3种应…

Linux中fork()函数详解

参考地址 1.对fork函数的认识&#xff1a; 一个进程&#xff0c;包括代码、数据和分配给进程的资源。fork&#xff08;&#xff09;函数通过系统调用创建一个与原来进程几乎完全相同的进程&#xff0c; 也就是两个进程可以做完全相同的事&#xff0c;但如果初始参数或者传入的变…

类似pyinstaller_Python 打包工具对比,Nuitka vs Pyinstaller

py2exe&#xff0c;Pyinstaller&#xff0c;Cx_freeze&#xff0c;Nuitka都可以完成python打包的任务。Pyinstaller和Nuitka都号称跨平台&#xff0c;但其实顶多只能算是工具本身跨平台&#xff0c;实际体验中不仅打包产生的文件不能跨平台&#xff0c;能否成功打包本身也不确定…

Android学习之PopupWindow

Android的对话框有两种&#xff1a;PopupWindow和AlertDialog。 详细说明如下&#xff1a; AlertDialog是非阻塞式对话框&#xff1a;AlertDialog弹出时&#xff0c;后台还可以做事情&#xff1b; AlertDialog的位置固定&#xff0c;而PopupWindow的位置可以随意&#xff1b; A…

spring整合mybatis接口无法注入问题

在学习Spring完之后简单的了解了MyBatis。然后进行简单的整合&#xff0c;遇到MyBatista接口映射的Bean无法自动注入的问题&#xff1b; 代码异常&#xff1a; 线程“main”org.springframe .bean .factory中的异常。创建名为“UserController”的bean时出错:通过字段“userdao…

LR重新安装的问题

LR的安装&#xff0c;说难不难&#xff0c;说易也不易。在此就把我安装时碰到的问题记录下来&#xff0c;以供大家参考。 第一次安装时&#xff0c;我是成功了的。&#xff08;注意&#xff1a;安装程序的目录不能有中文&#xff0c;当然同时你得有lincense&#xff09; 后来因…

matlab柱状斜线_Matlab小练习:按斜线方向依次赋值矩阵

来自知乎问题&#xff0c;觉得挺有意思&#xff0c;留给学生解答之余&#xff0c;我也做了一番思考&#xff0c;得到三种解法。题目如下&#xff1a;以n80为例&#xff0c;————————————————————一、先要根据确定矩阵的阶数 如果先生成足够大矩阵&#xff0…

Programming C#.Classes and Objects.只读字段

只读字段 当字段声明中含有 readonly 修饰符时&#xff0c;该声明所引入的字段为只读字段。给只读字段的直接赋值只能作为声明的组成部分出现&#xff0c;或在同一类中的实例构造函数或静态构造函数中出现。&#xff08;在这些上下文中&#xff0c;只读字段可以被多次赋值。&am…

会计知识

毛利 等于收入纯利 等于利润 按照&#xff1a;利润&#xff1d;收入-成本-费用 收入&#xff1a;收到的现金、支票、签单金额成本&#xff1a;买材料、酒水、电、工资、等费用&#xff1a;日租金、桌椅、碗、盘子等摊销、税金等等 ------------------------------------------…

2020-12-21

蜂鸣器&#xff08;向导辅助&#xff09; /******************************************************* This program was created by the CodeWizardAVR V3.12 Advanced Automatic Program Generator ?Copyright 1998-2014 Pavel Haiduc, HP InfoTech s.r.l. http://www.hpin…

xgboost 一般多少棵树_大白话人工智能算法-第32节集成学习之通俗理解XGBoost原理和过程...

本节讲解XGBoost的原理~目录1、回顾&#xff1a;1.1 有监督学习中的相关概念1.2 回归树概念1.3 树的优点2、怎么训练模型&#xff1a;2.1 案例引入2.2 XGBoost目标函数求解3、XGBoost中正则项的显式表达4、如何生长一棵新的树&#xff1f;5、xgboost相比原始GBDT的优化&#xf…