【BZOJ 2956】模積和 【中國國家隊清華集訓 2012-2013 第一天】
求∑∑((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。
樸素演算法O(n*m)
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int Mod = 19940417;
const int Maxn = 1e9;
int n,m;
int main(void)
{
ios::sync_with_stdio(false);
cin >>n>>m;
int ans = 0;
for(int i=1;i<=n;i++)
{
int x = n % i;
for(int j=1;j<=m;j++)
{
if(i==j)continue;
int y = m % j;
ans = (ans+(long long)x*y)%Mod;
}
}
cout<<ans;
return 0;
}
進一步思考
首先想到,要對式子進行一定的代數變形。
對於
程式碼:
C++
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#define inf 1000000000
#define mod 19940417
#define ine 3323403
#define ll long long
using namespace std;
inline int read()
{
int x=0;char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x;
}
ll n,m,ans;
ll sum(ll a,ll b)
{
return (b-a+1)*(a+b)/2%mod;
}
ll sum2(ll x)
{
return x*(x+1)%mod*(2*x+1)%mod*ine%mod;
}
ll cal(ll n)
{
ll tmp=0;
for(ll i=1,j;i<=n;i=j+1)
{
j=n/(n/i);
tmp=(tmp+n*(j-i+1)%mod-sum(i,j)*(n/i))%mod;
}
return (tmp+mod)%mod;
}
int main()
{
n=read();m=read();
ans=cal(n)*cal(m)%mod;
if(n>m)swap(n,m);
ll s1,s2,s3;
for(int i=1,j;i<=n;i=j+1)
{
j=min(n/(n/i),m/(m/i));
s1=n*m%mod*(j-i+1)%mod;
s2=(n/i)*(m/i)%mod*(sum2(j)-sum2(i-1)+mod)%mod;
s3=(n/i*m+m/i*n)%mod*sum(i,j)%mod;
ans=(ans-(s1+s2-s3)%mod+mod)%mod;
}
printf("%lld\n",ans);
return 0;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<vector>
#define inf 1000000000
#define mod 19940417
#define ine 3323403
#define ll long long
using namespace std;
inline int read()
{
int x=0;char ch=getchar();
while(ch<'0'||ch>'9')ch=getchar();
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x;
}
ll n,m,ans;
ll sum(ll a,ll b)
{
return (b-a+1)*(a+b)/2%mod;
}
ll sum2(ll x)
{
return x*(x+1)%mod*(2*x+1)%mod*ine%mod;
}
ll cal(ll n)
{
ll tmp=0;
for(ll i=1,j;i<=n;i=j+1)
{
j=n/(n/i);
tmp=(tmp+n*(j-i+1)%mod-sum(i,j)*(n/i))%mod;
}
return (tmp+mod)%mod;
}
int main()
{
n=read();m=read();
ans=cal(n)*cal(m)%mod;
if(n>m)swap(n,m);
ll s1,s2,s3;
for(int i=1,j;i<=n;i=j+1)
{
j=min(n/(n/i),m/(m/i));
s1=n*m%mod*(j-i+1)%mod;
s2=(n/i)*(m/i)%mod*(sum2(j)-sum2(i-1)+mod)%mod;
s3=(n/i*m+m/i*n)%mod*sum(i,j)%mod;
ans=(ans-(s1+s2-s3)%mod+mod)%mod;
}
printf("%lld\n",ans);
return 0;
}
Latex忽略程式碼中的空格
不等號: \neq
空格 : \quad
換行: \
向下取整:\lfloor{ }\rfloor
相關推薦
【BZOJ 2956】模積和 【中國國家隊清華集訓 2012-2013 第一天】
求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j。 Input 第一行兩個數n,m。 Output 一個整數表示答案mod 19940417的值 Sample
【BZOJ-2956】(清華集訓2012)模積和
題目連結 題目描述 求∑∑((nmodi)∗(mmodj))其中1<=i<=n,1<=j<=m,i≠j∑∑((nmodi)∗(mmodj))其中1<=i<=n,1<=j<=m,i≠j。 例如對於 n=3,
[BZOJ 2956]模積和
HP markdown solution lin rip swap putchar sin it is Description 題庫鏈接 求 \[\sum_{i=1}^n\sum_{j=1\wedge i\neq j}^m (n\mod i)(m\mod j)\] 取模。
BZOJ 2956 模積和 (數學推導+數論分塊)
之間 n+2 clas EDA sdn uri zoj 遞推關系 online 手動博客搬家: 本文發表於20170223 16:47:26, 原地址https://blog.csdn.net/suncongbo/article/details/79354835 題目鏈接:
[Bzoj 2956] 模積和 (整除分塊)
scanf 方法 using 展開 sin 乘法 algorithm queue 分塊 整除分塊 一般形式:\(\sum_{i = 1}^n \lfloor \frac{n}{i} \rfloor * f(i)\)。 需要一種高效求得函數 \(f(i)\) 的前綴和的方
[BZOJ 2956] 模積和
etc dig sin esp include space std mod type [題目鏈接] https://www.lydsy.com/JudgeOnline/problem.php?id=2956 [算法] 首先有兩個重要的等
【漏洞分析】Adobe Acrobat和Reader整數溢位漏洞(CVE-2012-0774)
0x00 前言 總體來說坑不多,但是對於windbg沒有watchpoint功能這一點,真的是很坑。 0x01 簡介 Adobe Acrobat和Reader在True Type Font (TTF)處理的實現上存在整數溢位漏洞,攻擊者可利用此漏洞執行任意程式碼。 受影響軟體
bzoj2956 模積和
div stdin tput c++ for 一個 註意 暴力 mes Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j。 Inpu
BZOJ2956: 模積和
ast stream bzoj IT six scanf nbsp sin d+ $n<=1e9$,$m<=1e9$,求$\sum_{i=1}^{n}\sum_{j=1}^{m}[i\neq j](n \ \ mod \ \ i)(m \ \ mod \ \ j
BZOJ_2956_模積和_數學
osi \n title AD 代碼 -h left HR pac BZOJ_2956_模積和_數學 Description 求∑∑((n mod i)*(m mod j))其中1<=i<=n,1<=j<=m,i≠j。
【Vue,自學第一天】
ever return 改變 修改 底層 IT 綁定 包裝 paragraph 一、創建第一個 Vue 應用 接下來我們創建第一個 Vue 應用。 View 層 - HTML 代碼如下: <div id="app"> {{ message }} </
【第一天】django快速開發——環境部署、表單、數據庫操作、模板、文件學習
django 開發 自動化運維 系統技術 web開發 安裝django1、安裝 setuptoolsyum install python-setuptools2、完成之後,就可以使用 easy_install 命令安裝 djangoeasy_install django註意:django對
P2260 [清華集訓2012]模積和
說明 CA mage get 技術 gcd 復制 urn 輸出格式 題目背景 數學題,無背景。 題目描述 求 輸入輸出格式 輸入格式: 兩個整數n m 輸出格式: 答案 mod 19940417 輸入輸出樣例 輸入樣例#1: 復制 3 4 輸出樣例
Python Web開發 統一資源定位符 【第一天】
引言 前面幾節我們已經基本上把一些Python的基礎知識快速的過了一遍,有些提到了有些沒有提到,這些我們後面遇到了可以再細說。從今天開始就拉開我們Python Web開發的序幕了。 客戶端 既然是web端的開發,想必大家對客戶端這個名詞有了解吧?但
Python入門基礎【第一天】
一、Python簡介 Python是一種計算機程式設計語言。是一種動態的、面向物件的指令碼語言,最初被設計用於編寫自動化指令碼(shell),隨著版本的不斷更新和語言新功能的新增,越來越多被用於獨立的、大型專案的開發。 Python的創始人為Guido van Rossum。1989年聖誕節期間,
【清華集訓2017模擬12.10】迴文串(迴文樹+樹鏈剖分)
Description: NYG 很喜歡研究迴文串問題,有一天他想到了這樣一個問題: 給出一個字串 S,現在有 4 種操作: • addl c :在當前字串的左端加入字元 c; • addr c :在當前字串的右端加入字元 c; • transl l
OpenCL “速成”衝刺【第一天】
話說軟體開發從來沒有速成一說,一門語言你學的越快,說明你在別的語言上下個功夫越多,所以這次加了引號,只不過幾周之後可能會有一個公司內部OpenCL的考核,雖然本人不需要考核,不過也正好藉機整理下之前OpenCL的經驗,一方面幫著下別的同事,一方面也給自己留點幹活。這個教程
JZOJ 5490. 【清華集訓2017模擬11.28】圖染色
Description Input 第一行包括兩個整數N,M。 接下來M行每行兩個整數u,v,代表存在一條裡連線 u,v的無向邊。可能存在重邊自環。 Output 降序輸出所有不為0的F(i) 。保留6位小數輸出。 Sample Inpu
BZOJ2956: 模積和(數論分塊)
signed fine com cal std long ace -m rst 題意 題目鏈接 Sol 啊啊這題好惡心啊,推的時候一堆細節qwq \(a \% i = a - \frac{a}{i} * i\) 把所有的都展開,直接分塊。關鍵是那個\(i \not= j\)
【第四節 Node.js模塊和包】
可選 obj hello keyword tor 簡單 enc mod ima 概念:模塊(Module)和包(Package)是Node.js最重要的支柱。開發一個具有一定規模的程序不可能只用一個文件,通常需要把各個功能拆分、分裝、然後組合起來。模塊正式為