2018 HDU 6286 數學容斥

2021-08-20 14:11:10 字數 1003 閱讀 9912

題意:給定兩個區間 [a, b], [c, d],問有多少個有序對 (x, y)(x >= a && x <= b && y >= c && y <= d)使得,(x*y)= 0(mod 2018)。

輸入:a, b, c, d。

資料範圍:多組輸入,所有輸入均為[1, 1e9]。

題解:因為範圍太大,所以暴力(n^2)是不可能的了,但是可以注意到的是,2018的因子為1, 2, 1009, 2018,以此為突破口分別計算

技巧:計算[l,r]內的x的倍數的個數可以用下面公式o(1)得到,不需要暴力跑

公式:sum = r / x - l / x + (l % x == 0 ? 1 : 0);

可以先計算兩個區間內2018的倍數,因為2018乘任何數都為2018的倍數,然後計算出分別為t1和t2,則ans += t1 (d - c + 1) + t2 (b - a + 1) - t1 * t2; 最後減掉t1 * t2的原因是計算重複,容斥。

同理計算其他的個數。

#include 

using

namespace

std;

const

int maxn = 2e5 + 10;

typedef

long

long ll;

int main()

t3 -= t1;

ll t4 = d / 1009 - c / 1009;

if(c % 1009 == 0) t4++;

t4 -= t2;

ll t5 = b / 2 - a / 2;

if(a % 2 == 0) t5++;

ll t6 = d / 2 - c / 2;

if(c % 2 == 0)

ans += t3 * (t6 - t2) + t4 * (t5 - t1);

printf("%lld\n", ans);

}return

0;}

hdu 4135,數學 容斥

題意 求 a,b 區間裡面,與c互質的數的個數。範圍 0分析 先將c分解質因數,根據c的範圍可以判斷質數的範圍不超過x個。x 自己線性篩素數後,從小到大乘一下,看當乘到多少個的時候,積大於10 9,則可以判斷c的最多質因數個數 假設c的質因數有2,3,5 則 a,b 區間裡,包含質因數2的數的個數為...

HDU 2204(容斥原理 數學)

2015 05 14 19 35 28 題目 每次給出乙個n n 10 18 讓你求出1 n中能表示成m k的數的個數。思路 比較明顯可以用容斥解的題目.但是要注意細節。首先,觀察 k 的最大值,2 60 10 18,所以 k 60,所以我們可以列舉一下 k 的值。對於每個 k,直接計算出最大可能的...

數學知識 容斥原理

容斥原理 aubuc a b c a b a c b c a b c a 表示集合a中元素的個數 推廣 例題 能被整除的數 給定乙個整數n和m個不同的質數p1,p2,pm。請你求出1 n中能被p1,p2,pm中的至少乙個數整除的整數有多少個。輸入格式 第一行包含整數n和m。第二行包含m個質數。輸出格...