Description

 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j。

  

Input

第一行两个数n,m。

Output

  一个整数表示答案mod 19940417的值

Sample Input

3 4

Sample Output

1

样例说明
  答案为(3 mod 1)*(4 mod 2)+(3 mod 1) * (4 mod 3)+(3 mod
1) * (4 mod 4) + (3 mod 2) * (4 mod 1) + (3 mod 2) * (4 mod 3) + (3 mod 2) * (4
mod 4) + (3 mod 3) * (4 mod 1) + (3 mod 3) * (4 mod 2) + (3 mod 3) * (4 mod 4)
= 1

数据规模和约定
  对于100%的数据n,m<=10^9。

由题意:

∑∑((n mod i) * (m
mod j)) ( i≠j)= ∑(n mod i) * ∑(m mod i) - ∑((n mod i) * (m mod i))=
∑(n-[n/i]*i) * ∑(m-[m/i]*i) - ∑(nm-([n/i]+[m/i])i+[n/i][m/i]*i*i)= ∑(n-[n/i]*i)
* ∑(m-[m/i]*i) – n*n*m+∑[n/i]i+∑[m/i]i-∑[n/i][m/i]*i*i(n <= m)

然后利用[n/i]的分组加速运算即可,不过中间过程有多处需要注意的,

m/(m/i)的时候需要和n比较大小,因为可能会超出范围。

此外就是int乘法可能会爆,需要转long long,中间过程别忘了MOD

 

代码:

#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <queue>
#include <string>
#define LL long long
#define MOD 19940417
#define nsix 3323403 using namespace std; int n, m; LL cal(int len, int x)
{
LL ans = , tmp;
int j;
for (int i = ; i <= len; ++i)
{
j = min(len, x/(x/i));//这一句不用min,j会越界
tmp = ((LL)i+j)*(j-i+)/%MOD;
ans += tmp*(x/i)%MOD;
ans %= MOD;
i = j;
}
return ans;
} inline LL sum(LL x)
{
return x*(x+)%MOD*(*x+)%MOD*nsix%MOD;
} LL cal2(int x, int y)
{
LL ans = , tmp, ttmp;
int j;
for (int i = ; i <= x; ++i)
{
j = min(x/(x/i), y/(y/i));
//j = min(j, x);
tmp = sum(j)-sum(i-);
tmp = (tmp%MOD+MOD)%MOD;
ttmp = ((LL)x/i)*(y/i)%MOD;
ans += tmp*ttmp%MOD;
ans %= MOD;
i = j;
}
return ans;
} void work()
{
if (n > m) swap(n, m);
LL ans, m2, n2, snn, smm, snm, ss;
m2 = (LL)m*m%MOD;
n2 = (LL)n*n%MOD;
smm = cal(m, m);
snn = cal(n, n);
snm = cal(n, m);
ss = cal2(n, m);
ans = m2*n2%MOD - m2*snn%MOD - n2*smm%MOD + snn*smm%MOD;
ans -= m*n2%MOD;
ans += m*snn%MOD;
ans += n*snm%MOD;
ans -= ss;
ans = (ans%MOD+MOD)%MOD;
printf("%lld\n", ans);
} int main()
{
//freopen("test.in", "r", stdin);
while (scanf("%d%d", &n, &m) != EOF)
work();
return ;
}

ACM学习历程—BZOJ2956 模积和(数论)的更多相关文章

  1. ACM学习历程—HDU5667 Sequence(数论 && 矩阵乘法 && 快速幂)

    http://acm.hdu.edu.cn/showproblem.php?pid=5667 这题的关键是处理指数,因为最后结果是a^t这种的,主要是如何计算t. 发现t是一个递推式,t(n) = c ...

  2. ACM学习历程—HDU5668 Circle(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5668 这题的话,假设每次报x个,那么可以模拟一遍, 假设第i个出局的是a[i],那么从第i-1个出局的人后,重新 ...

  3. ACM学习历程—HDU5666 Segment(数论)

    http://acm.hdu.edu.cn/showproblem.php?pid=5666 这题的关键是q为质数,不妨设线段上点(x0, y0),则x0+y0=q. 那么直线方程则为y = y0/x ...

  4. ACM学习历程—HDU5585 Numbers(数论 || 大数)(BestCoder Round #64 (div.2) 1001)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5585 题目大意就是求大数是否能被2,3,5整除. 我直接上了Java大数,不过可以对末尾来判断2和5, ...

  5. BZOJ2956: 模积和(数论分块)

    题意 题目链接 Sol 啊啊这题好恶心啊,推的时候一堆细节qwq \(a \% i = a - \frac{a}{i} * i\) 把所有的都展开,直接分块.关键是那个\(i \not= j\)的地方 ...

  6. ACM学习历程—HDU5637 Transform(数论 && 最短路)

    题目链接:http://codeforces.com/problemset/problem/590/A 题目大意是给两种操作,然后给你一个s,一个t,求s至少需要多少次操作到t. 考虑到第一种操作是将 ...

  7. ACM学习历程—SNNUOJ1132 余数之和(数论)

    Description F(n) = (n % 1) + (n % 2) + (n % 3) + ...... (n % n).其中%表示Mod,也就是余数.例如F(6) = 6 % 1 + 6 % ...

  8. ACM学习历程—HDU1719 Friend(数论)

    Description Friend number are defined recursively as follows. (1) numbers 1 and 2 are friend number; ...

  9. 【bzoj2956】模积和 数论

    题目描述 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j. 输入 第一行两个数n,m. 输出 一个整数表示答案mod 1994041 ...

随机推荐

  1. 模型层TP框架数据库的操作

    在shop入口的文件下的HOME文件夹中使用模型层 第一步修改配置模块把数据库的各种链接做好,打开HOME中的conf文件夹中的config.php,找到Thinkphp文件加下的conf文件打开co ...

  2. BI测试

    BI概念: 商业智能(Business Intelligence 简称BI),指数据仓库相关技术与应用的通称.指利用各种智能技术,来提升企业的商业竞争力.是帮助企业更好地利用数据提高决策质量的技术,包 ...

  3. Intellij IDEA打开多项目窗口

    我版本是2016.02.04 其他版本可能不一样的设置

  4. APNS推送原理详解

    推送是解决轮询所造成的流量消耗和电量消耗的一个比较好的解决方案,在Android上,虽然Google提供了GCM(之前为C2DM),但在国内基本等于没用,各大Android应用基本都自己架设推送Ser ...

  5. css3 transition效果

    <meta charset="UTF-8"> <style> .btn { display: inline-block; font-size: 12px; ...

  6. centos出现-bash: /usr/bin/php: 没有那个文件或目录解决方法

    造成这个的原因是因为找不到php的执行文件导致的,原先我是安装的php5.4,然后卸载了重新安装php7,导致php可执行文件没有放到$PATH中,可以在终端测试:php -v,如果报错bash: / ...

  7. Unicode Category

    Lu(letter,uppercase):大写字母. Ll(letter.lowercase):小写字母. Lt(letter,titlecase):词首字母大写的字母. Lm(letter,modi ...

  8. Javaweb基础--->Servlet(转载)

    今天看到这篇博客,感觉还不错,拿来借鉴学习一下. 一.Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客 ...

  9. linux 11 -- mount,umount

    Linux 文件系统是一个以 / 为根的大树,我们在不同的设备和分区上都有文件系统.我们如何处理这种明显的不一致性?根 (/) 文件系统是在初始化过程中挂载的.您创建的其他每个文件系统在挂载 在挂载点 ...

  10. CentOS6安装DaoCloud加速器

    天朝的网,你又不是不懂.我最爱的红杏最近也用不了了.FUCK GFW. 在这,我们使用DaoCloud的加速器,打开网址 https://dashboard.daocloud.io/mirror 找到 ...