博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 2956 数学展开,分段处理
阅读量:6806 次
发布时间:2019-06-26

本文共 2284 字,大约阅读时间需要 7 分钟。

首先对于答案

ΣΣ(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: 2956    User: BLADEVIL    Language: Pascal    Result: Accepted    Time:388 ms    Memory:224 kb****************************************************************/ //By BLADEVILconst    d39                             =19940417;     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:=0;    i:=1;    while i<=y do    begin        j:=x div (x div i);        if j>y then j:=y;        z:=((i+j)*(j-i+1) div 2) mod d39;        calc:=(calc+(z*(x div i) mod d39) mod d39)mod d39;        i:=j+1;    end;end; function sum(x:int64):int64;var    a, b, c                         :int64;begin    if x=0 then exit(0);    a:=x; b:=x+1; c:=2*x+1;    if a mod 3=0 then a:=a div 3 else    if b mod 3=0 then b:=b div 3 else    if c mod 3=0 then c:=c div 3;    if a mod 2=0 then a:=a div 2 else    if b mod 2=0 then b:=b div 2 else    if c mod 2=0 then c:=c div 2;    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:=1;    fuck:=0;    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-1)) 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+1;    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.

 

转载于:https://www.cnblogs.com/BLADEVIL/p/3491362.html

你可能感兴趣的文章
File API文件操作之FileReader二
查看>>
明基逐鹿荣获"2016年中国软件行业最具影响力企业奖"
查看>>
聊一聊Cookie(结合自己的学习方法分享一篇维基百科和一篇segmentfault(思否)好文)...
查看>>
Android CircleMenu:旋转转盘选择Menu
查看>>
XML实体注入漏洞
查看>>
【Java小工匠聊密码学】--对称加密--DES
查看>>
调用Thread类的方法:public final String getName() 为什么得到的线程对象的名称默认是:Thread-0、Thread-1、Thread-2、...呢?...
查看>>
Shell脚本里的双冒号是什么意思
查看>>
java基础学习_GUI_如何让Netbeans的东西Eclipse能访问、GUI(图形用户接口)_day25总结...
查看>>
从零开始学 Web 之 CSS(三)链接伪类、背景、行高、盒子模型、浮动
查看>>
java多线程--信号量Semaphore的使用
查看>>
中国存储芯片进入战略关键期
查看>>
市场上的视觉图像采集卡软硬功能对比
查看>>
阿里专家与你分享:你必须了解的Java多线程技术
查看>>
张高兴的 Windows 10 IoT 开发笔记:三轴数字罗盘 HMC5883L
查看>>
rocketmq 同步双写
查看>>
细数国内无人机的江湖门派
查看>>
张高兴的 Windows 10 IoT 开发笔记:部署 ASP.NET Core 2 应用
查看>>
Waymo已经开始绘制亚特兰大地图数据,自动驾驶汽车路测地点又添新城
查看>>
ARM 和 RISC-V 公然开撕,GNOME 之父指责 ARM
查看>>