1. 程式人生 > >【BZOJ 2956】模積和 【中國國家隊清華集訓 2012-2013 第一天】

【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; }

進一步思考

首先想到,要對式子進行一定的代數變形。

對於n%i=nnii

(n%i)(m%j)(ij)[nnii][mmjj](ij)

程式碼:

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 AcrobatReader整數溢位漏洞(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最重要的支柱。開發一個具有一定規模的程序不可能只用一個文件,通常需要把各個功能拆分、分裝、然後組合起來。模塊正式為