B - 完美的數字 FZU - 2191

Bob是個很喜歡數字的孩子,現在他正在研究一個與數字相關的題目,我們知道一個數字的完美度是 把這個數字分解成三個整數相乘A*A*B(0 S,S表示的是從a到b的所有數字的流行度之和,即S=d(a)+d(a+1)+…+d(b)。
Input
輸入兩個整數a,b(1<=a<=b<=10^15)
Output
輸出一個整數,表示從a到b的所有數字流行度之和。
Sample Input
1 80
Sample Output

107

可以選擇遍歷出小於等於該數字的所有情況後,相減就行了,然而vjudge上要用I64%d。。。

#include<cstdio>
#define ll long long
ll f(ll n){
    ll i,sum=0;
    for(i=1;i<=n;i++){ll t=n/(i*i)-i+1;if(t<=0)break;sum+=t;}
    return sum;
}
int main(){
    ll a,b;
    while(~scanf("%I64d%I64d",&a,&b))
        printf("%I64d\n",f(b)-f(a-1));
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章