日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JZOJ 5163. 【NOIP2017模拟6.25】PS的烦恼

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 5163. 【NOIP2017模拟6.25】PS的烦恼 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

話說PS總是有著各種各樣的煩惱,這天,他又在為自己失敗的感情史煩惱著。這時,他心中的女神,魔法少女小圓從天而降,她對他說,如果你能幫我解決一個問題,我就讓你永遠沒有煩惱。
問題是這樣的:
尋找一個最大的k,使得存在一個x使得x^k=y,那么f(y)=k,即y最多可以開k次方根。
小圓的要求是求出從a到b的f值之和(包括a和b)。

Input

多組數據,每組數據一行包含兩個數a,b,文件以0 0(不需要輸出)結尾。

Output

每組數據一行表示這一段f值之和。

Sample Input

2 10
248832 248832
0 0

Sample Output

13
5

Data Constraint

30%的數據滿足:a<=1000 b<=1000
100%的數據滿足:2<=a<=b<=10^18

Solution

  • 又是一道數論題。考慮將問題轉化:不妨將題目轉化為 N 以內每個數最大開方次數 累加和

  • 設從 1N 的答案為 Get(N) ,則本題答案即為:Get(B)?Get(A?1)

  • 再設 Fi 為最大開 i 次方的數的個數, Gi 為至少能開 i 次方的數的個數。

  • 則有:Gi=N??i?1

    Fi=Gi?j=2?60i?Fi?j

  • (“至少有的” 減去 “只有的”)&(“1”不計數,所以要減1),從后往前推即可得到 Fi

  • 于是答案即為: Fi?i

Code

#include<cstdio> #include<cmath> using namespace std; typedef long long LL; LL a,b; LL f[61],g[61]; inline LL get(LL x) {g[1]=x-1;for(int i=2;i<=60;g[i++]--){g[i]=exp(log(x)/i);if(pow(g[i],i)>x) g[i]--;}LL sum=0;for(int i=60;i;i--){f[i]=g[i];for(int j=60/i;j>1;j--) f[i]-=f[i*j];sum+=f[i]*i;}return sum; } int main() {while(scanf("%lld%lld",&a,&b),a+b)printf("%lld\n",get(b)-get(a-1));return 0; } 與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的JZOJ 5163. 【NOIP2017模拟6.25】PS的烦恼的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。