51nod 歡樂手速場C 開心的小Q

2021-07-26 16:17:45 字數 1281 閱讀 9116

開心的小q

tangjz (命題人)quailty (測試)

基準時間限制:1 秒 空間限制:131072 kb 分值: 80

如果乙個數字存在乙個約數是完全平方數,那麼小q就認為這個數是有趣的。

小q喜歡收集有趣的數字,每找到乙個有趣的數,小q就會變得很開心。

小q發現12是有趣的,18也是有趣的,它們都是36的約數,而在36的約數中,還有3個數是有趣的,它們是4、9、36。

小q很好奇,在a~b裡每個數字各有多少個有趣的約數,由於a和b太大了,所以他只想知道這些個數之和是多少。

例如4有1個有趣的約數,8有2個有趣的約數,9有1個有趣的約數,所以1~10裡每個數的有趣約數個數之和是4。

input

輸入資料報括2個數:a, b,中間用空格分隔。(1≤a≤b≤10^9)

output

輸出a~b裡每個數字的有趣約數個數之和。

input示例

1 10

output示例

4題解:一拿到題目我是一臉懵比的,然後推著推出個答案是∑ni=1∑d|i(1−|μ(d)|)

設f(n)表示1-n中有平方因子的個數,f(n)=σ(i,1,n)(1-|μ(i)|)根據容斥原理可以化簡成

n-σ(i,1,sqrt(n))μ[i]*trunc(n/i/i);

那麼答案就可以表示為f(n/i)(i=1…n)

用分塊計算就可以了。

code:

#include

#include

#include

#include

#include

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

using

namespace

std;

typedef

long

long ll;

const

int n=1e6+5;

int n,m;

int mu[n],a[n];

bool bz[n];

inline ll f(int x)

ll calc(int x)

ans+=f(x);

return ans;

}int main()

fo(j,1,tot)

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

printf("%lld\n",calc(m)-calc(n-1));

return

0;}

51NOD 貪心演算法專題 C 接水問題二

n個人一起排隊接水,第i個人的重要性是a i 需要b i 的時間來接水。1 n 100000 0 b i 1000 0 a i 1000 同時只能有乙個人接水,正在接水的人和沒有接水的人都需要等待。完成接水的人會立刻消失,不會繼續等待。你可以決定所有人接水的順序,並希望最小化所有人等待時間乘以自己的...

C語言學習之51nod部分習題編碼

本篇文章是自己在c語言學習中做過的一些習題,隨時補充,不定時更新!2135 價錢統計 浮點數誤差處理 include include include include int main 2118 完全平方數 浮點數轉整數或者迴圈處理 include includeint main 2101 越界了嗎 ...

51nod 演算法馬拉松19 C 集合對

定義集合xor操作 a xor b a b a b。問有多少對 p,q 滿足 p a q b 使得 p xor a xor q xor b a xor b其中p q都是集合。答案對1e9 7取模。例如 a b a xor b 列舉所有情況p q有2種。輸出答案對10 9 7取模的值 三個整數a b ...