51nod 1222 最小公倍數計數

2021-07-26 05:29:57 字數 1269 閱讀 3582

求有多少對a和b滿足a<=b且l<=[a,b]<=r

區間[l,r]答案等於[1,r]-[1,l-1]

a<=b暫且不考慮。為了方便,接下來都不寫下取整,出現除法即為整除。 ∑n

i=1∑

nj=1

[ij(

i,j)

<=n]

∑nd=1∑n

i=1∑

nj=1

[(i,

j)=d

]∗[i

jd<=n]

設i=i』d,j=j』d ∑n

d=1∑

ni′=

1∑nj

′=1[

(i′,

j′)=

1]∗[

i′j′

d<=n]

我們反演一下,設k=(i』,j』),i』=i」k,j』=j」k ∑n

k=1μ

(k)∗

∑ni′

=1∑n

j′=1

∑nd=

1[i′

j′k2

d<=n]

後面部分相當於乙個子問題求多少對(a,b,c)滿足abc<=n

設a<=b<=c,則

a<=n1

3 且b

<=na

−−√

c的範圍可以直接得到了。

因為原本abc是無序的,但是其實我們不能直接乘上3!,還需要討論a=b=c或a=b!=c或a!=b=c三種情況。

最後注意沒有考慮a<=b因此求出來無序,可以加上所有a=b的情況再除以2

#include

#include

#include

#define fo(i,a,b) for(i=a;i<=b;i++)

using namespace std;

typedef long long ll;

const int maxn=3000000+10;

int pri[maxn],mu[maxn];

bool bz[maxn];

int i,j,k,top;

ll n,m,l,t,ans;

void prepare()

mu[i*pri[j]]=-mu[i];}}

}ll calc(ll n)

t-=5;

}return t;

}ll getans(ll n)

l=(l+n)/2;

return l;

}int main()

51nod 1419 最小公倍數挑戰

1419 最小公倍數挑戰 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 幾天以前,我學習了最小公倍數。玩得挺久了,想換換口味。我不想用太多的數字,我想從1到n中選三個數字 可以相同 使得他們的最小公倍數最大。input 單組測試資料。第一行...

51nod 1419 最小公倍數挑戰

原題鏈結 1419 最小公倍數挑戰 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 幾天以前,我學習了最小公倍數。玩得挺久了,想換換口味。我不想用太多的數字,我想從1到n中選三個數字 可以相同 使得他們的最小公倍數最大。input 單組測試資...

51nod 1419 最小公倍數挑戰

幾天以前,我學習了最小公倍數。玩得挺久了,想換換口味。我不想用太多的數字,我想從1到n中選三個數字 可以相同 使得他們的最小公倍數最大。input 單組測試資料。第一行有乙個整數n 1 n 1,000,000 output 輸出乙個整數表示選三個數字的最大的最小公倍數。input示例 9 7outp...