简单般Bzoj2154: Crash的数字表格

Sol

增加了数据组数T<=10000

推到

\(ans=\sum_{d=1}^{N}d*\sum_{i=1}^{\lfloor\frac{N}{d}\rfloor}\mu(i)*i^2*\frac{(\lfloor\frac{N}{d*i}\rfloor + 1) * \lfloor\frac{N}{d*i}\rfloor}{2}*\frac{(\lfloor\frac{M}{d*i}\rfloor + 1) * \lfloor\frac{M}{d*i}\rfloor}{2}\)

\(设S(i)=\frac{(i+1)*i}{2},将d*i换成k\)

\(原式=\sum_{k=1}^{N}S(\lfloor\frac{N}{k}\rfloor)*S(\lfloor\frac{M}{k}\rfloor)*k*\sum_{i|k}i*\mu(i)\)

\(设f(n)=\sum_{i|n}i*\mu(i),它是个积性函数,可以线性筛\)

# include <bits/stdc++.h>
# define RG register
# define IL inline
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int _(1e7 + 1), MOD(1e8 + 9); IL ll Read(){
char c = '%'; ll x = 0, z = 1;
for(; c > '9' || c < '0'; c = getchar()) if(c == '-') z = -1;
for(; c >= '0' && c <= '9'; c = getchar()) x = x * 10 + c - '0';
return x * z;
} int prime[_], f[_], num, s[_];
bool isprime[_]; IL void Prepare(){
isprime[1] = 1; s[1] = f[1] = 1;
for(RG int i = 2; i < _; ++i){
if(!isprime[i]) prime[++num] = i, f[i] = 1 - i;
for(RG int j = 1; j <= num && i * prime[j] < _; ++j){
isprime[i * prime[j]] = 1;
if(i % prime[j]) f[i * prime[j]] = 1LL * f[i] * f[prime[j]] % MOD;
else{ f[i * prime[j]] = f[i]; break; }
}
s[i] = (s[i - 1] + 1LL * i * f[i] % MOD) % MOD;
}
} IL ll S(RG ll x){ return x * (x + 1) / 2 % MOD; } int main(RG int argc, RG char *argv[]){
Prepare();
for(RG ll T = Read(), n, m; T; --T){
RG ll ans = 0; n = Read(); m = Read();
if(n > m) swap(n, m);
for(RG ll i = 1, j; i <= n; i = j + 1){
j = min(n / (n / i), m / (m / i));
(ans += 1LL * (s[j] - s[i - 1] + MOD) % MOD * S(n / i) % MOD * S(m / i) % MOD) %= MOD;
}
printf("%lld\n", (ans + MOD) % MOD);
}
return 0;
}

BZOJ2693jzptab的更多相关文章

随机推荐

  1. LearnPython_week1

    1.      Python安装 2.      Hello World程序 3.      变量的简单使用 4.      注释#'" 5.      用户输入 6.      字符串格式 ...

  2. Golang学习 - strconv 包--数据类型转换

    // 将布尔值转换为字符串 true 或 false func FormatBool(b bool) string // 将字符串转换为布尔值 // 它接受真值:1, t, T, TRUE, true ...

  3. JavaScript 常用单词整理

    JS单词 push :添加一个数组元素 document :文档 pop :删除最后一个数组元素 console :控制台 shift :删除第一个数组元素 string :字符串 Concat 组合 ...

  4. CodeForces 586D

    题意略. 将人的移动分为3步,第一步向右,第二步是行之间的变换,第三步是向右走2步,三步加在一起算作是一次移动,计入判重数组. 在第一步时有一个特殊情况:已经越过最右边的边界线,这时graph[x][ ...

  5. jQuery(function(){...})与(function($){...})(jQuery)的“兄弟”情结

    记得那时在学习写基于jQuery的插件时,了解到(function($){...})(jQuery)的代码结构,一开始还没发觉,后来百度了解它的语意时,从搜索结果中发现了jQuery(function ...

  6. springMvc学习笔记一

    什么是springmvc  springmvc就是spring框架的一个模块 所以springmvc与spring之间无需通过中间整合层进行整合的. springmvc又是基于mvc的web框架 mv ...

  7. SQLite常用函数及语句

    SQLite3.0使用的是C的函数接口,常用函数如下: sqlite3_open() //打开数据库 sqlite3_close() //关闭数据库 sqlite3_exec() //执行sql语句, ...

  8. 在linux ubuntu下搭建深度学习/机器学习开发环境

    一.安装Anaconda 1.下载 下载地址为:https://www.anaconda.com/download/#linux 2.安装anaconda,执行命令: bash ~/Downloads ...

  9. python str与bytes之间的转换

    # bytes object b = b"example" # str object s = "example" # str to bytes bytes(s, ...

  10. redis客户端连接服务端the version of redis server is too low to support this function错误

    redis作为一个内存数据库,使用得当可以大大的提升系统运行的效率,据说能读的速度是110000次/s,写的速度是81000次/s,我们的其中一个系统就用到了这个. 由于之前负责这个的同事离职,只好临 ...