bzoj 2956 数学展开,分段处理
首先对于答案
ΣΣ(n mod i)*(m mod j) i<>j
也就是Σ(n mod i)Σ(m mod j)-Σ(n mod i)(m mod i)
将mod展开,我们可以得到有floor的式子,对于这种式子,我们可以
利用分段的思想,将O(N)的简化为sqrt(n)的
/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
const
d39 =; var
n, m :int64;
ans, ans2 :int64; function min(a,b:int64):int64;
begin
if a>b then min:=b else min:=a;
end; function calc(x,y:int64):int64;
var
i, j :int64;
z :int64;
begin
calc:=;
i:=;
while i<=y do
begin
j:=x div (x div i);
if j>y then j:=y;
z:=((i+j)*(j-i+) div ) mod d39;
calc:=(calc+(z*(x div i) mod d39) mod d39)mod d39;
i:=j+;
end;
end; function sum(x:int64):int64;
var
a, b, c :int64;
begin
if x= then exit();
a:=x; b:=x+; c:=*x+;
if a mod = then a:=a div else
if b mod = then b:=b div else
if c mod = then c:=c div ;
if a mod = then a:=a div else
if b mod = then b:=b div else
if c mod = then c:=c div ;
sum:=a mod d39;
sum:=sum*b mod d39;
sum:=sum*c mod d39;
end; function fuck:int64;
var
i, j :int64;
t1, t2 :int64;
z :int64;
begin
i:=;
fuck:=;
while i<=min(n,m) do
begin
t1:=n div (n div i);
t2:=m div (m div i);
j:=min(t1,t2);
z:=(((sum(j)-sum(i-)) mod d39+d39) mod d39);
z:=(z*(n div i)) mod d39;
z:=(z*(m div i)) mod d39;
fuck:=(fuck+z) mod d39;
i:=j+;
end;
end; begin
read(n,m);
ans2:=calc(m,m) mod d39;
ans2:=((m*m-ans2) mod d39+d39) mod d39;
ans:=((n*n-calc(n,n)) mod d39*ans2) mod d39;
ans2:=(n*m mod d39)*min(n,m) mod d39;
ans2:=(ans2+fuck) mod d39;
ans2:=((ans2-m*calc(n,min(n,m)))mod d39+d39) mod d39;
ans2:=((ans2-n*calc(m,min(n,m)))mod d39+d39) mod d39;
ans:=((ans-ans2) mod d39+d39) mod d39;
writeln(ans);
end.
bzoj 2956 数学展开,分段处理的更多相关文章
- BZOJ 2326 数学作业(分段矩阵快速幂)
实际上,对于位数相同的连续段,可以用矩阵快速幂求出最后的ans,那么题目中一共只有18个连续段. 分段矩阵快速幂即可. #include<cstdio> #include<iostr ...
- bzoj 5334 数学计算
bzoj 5334 数学计算 开始想直接模拟过程做,但模数 \(M\) 不一定为质数,若没有逆元就 \(fAKe\) 掉了. 注意到操作 \(2\) 是删除对应的操作 \(1\) ,相当于只有 \(1 ...
- 「BZOJ 2956」模积和
「BZOJ 2956」模积和 令 \(l=\min(n,m)\).这个 \(i\neq j\) 非常不优雅,所以我们考虑分开计算,即: \[\begin{aligned} &\sum_{i=1 ...
- BZOJ 2956 模积和 (数学推导+数论分块)
手动博客搬家: 本文发表于20170223 16:47:26, 原地址https://blog.csdn.net/suncongbo/article/details/79354835 题目链接: ht ...
- BZOJ 2956 模积和(分块)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2956 [题目大意] 求∑∑((n%i)*(m%j))其中1<=i<=n,1 ...
- BZOJ 2956 模积和
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2956 题意:给出n和m.计算: 思路: i64 n,m; i64 cal(i64 m,i ...
- BZOJ 2326 数学作业(矩阵)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2326 题意:定义Concatenate(1,N)=1234567……n.比如Concat ...
- [Bzoj 2956] 模积和 (整除分块)
整除分块 一般形式:\(\sum_{i = 1}^n \lfloor \frac{n}{i} \rfloor * f(i)\). 需要一种高效求得函数 \(f(i)\) 的前缀和的方法,比如等差等比数 ...
- BZOJ 4173: 数学
4173: 数学 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 462 Solved: 227[Submit][Status][Discuss] D ...
随机推荐
- IOS基础——IOS学习路线图(一)
一.一个月 1.OC语法基础. 2.KVC和KVO 3.IOS UI基础 4.UI表视图与集合视图 5.UIStoryboard和autoLayout 6.Ipad API 二.10天 7.静态页面考 ...
- Java垃圾回收基础
- mariadb介绍
事务(Transaction):组织多个操作为一个整体,要么全部执行,要么全部不执行 “回滚” ,rollback SQL接口:sql语句分析器和优化器 表:为了满足范式设计要求,将一个数据集分拆为多 ...
- PHP 实现下载文件到本地
只需要在php文件中设置请求头就可以了,创建download.php文件,代码如下: $fileName = $_GET['filename']; //得到文件名 header( "Cont ...
- php不使用插件导出excel
php不使用插件导出excel的简单方法,首先获取需要导出的数据的数组,数组的格式在下面. 之后就是定义文件名称和需要导出的excel的样式,最后就是循环数组,输出数据了 代码: $filename= ...
- PHP通过IP 获取 地理位置(实例)
发布:JB02 来源:脚本学堂 分享一例php代码,实现通过IP地址获取访问者的地理位置,在php编程中经常用到,有需要的朋友参考下吧.本节内容:PHP通过IP获取地理位置 例子: 复制代码代码 ...
- 强大的网络通信框架(实现缓存)--第三方开源--volley
Android Volley是Android平台上很好用的第三方开源网络通信框架.使用简答,功能强大. Android Volley的库jar包Volley.ja下载连接地址:Volley下载 下载后 ...
- .NET软件汉化小实例
Author:KillerLegend Date:2014.6.18 From:http://www.cnblogs.com/killerlegend/p/3795577.html 好的,今天我们来汉 ...
- 浅析python的string.Template
摘自:python参考手册. string模块定义了一种新字符串类型Template,简化了特定的字符串置换操作, Template定义一个类 1.template(s), #s是字符串 s='he ...
- Microsoft Power BI Designer
1/25/2015年1月25发布的预览版本,可以通过以下地址下载,注意有x64 和x32 版本区别(和上次PowerMap一样,一般也推荐的使用x64版本) http://www.microsoft. ...