開心的小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 ...