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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

JZOJ 4919. 【NOIP2017提高组模拟12.10】神炎皇

發布時間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JZOJ 4919. 【NOIP2017提高组模拟12.10】神炎皇 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Description

神炎皇烏利亞很喜歡數對,他想找到神奇的數對。
對于一個整數對 (a,b),若滿足 a+b<=na+bab 的因子,則成為神奇的數對。請問這樣的數對共有多少呢?

Input

一行一個整數n。

Output

一行一個整數表示答案,保證不超過64位整數范圍

Sample Input

21

Sample Output

11

Data Constraint

對于20%的數據 n<=103
對于40%的數據 n<=105
對于60%的數據 n<=106
對于80%的數據 n<=1012
對于100%的數據 n<=1014

Solution

  • 觀察a+b<=na+b|ab

  • 使

    d=Gcd(a,b)必然 d>1 才能使 a+b|ab

  • a=adb=bd

  • 可知

    Gcd(a,b)=1

  • 推出

    Gcd(a+b,b)=1

  • 所以

    a+b|ab=>(a+b)d|abd2=>a+b|abd

  • 因為

    a+b?ab

  • 所以

    a+b|d

  • 又設

    d=c(a+b)

  • a+b=d(a+b)=(a+b)2?pnp>0

  • 所以

    a+bn

  • k=a+b,之后枚舉 k

  • 由于p可能的取值為?nk2?

  • Gcd(a+b,b)=1Gcd(k,b)=1

  • 那么b’的取值就是

    φ(k)

  • 所以答案就是

    k=1nk??nk2??φ(k)

  • 因為 φ(k) 可以用線性篩法求出!

  • 最終時間復雜度就是

    O(n)

Code

#include<cstdio> #include<cmath> using namespace std; typedef long long LL; const int N=10000001; int m; LL n,ans; int f[N],phi[N]; bool bz[N]; int main() {scanf("%lld",&n);m=sqrt(n);for(int i=2;i<=m;i++){if(!bz[i]) phi[f[++f[0]]=i]=i-1;for(int j=1;j<=f[0] && i*f[j]<=m;j++){bz[i*f[j]]=true;if(i%f[j]==0){phi[i*f[j]]=phi[i]*f[j];break;}else phi[i*f[j]]=phi[i]*(f[j]-1);}}//線性篩法for(int i=2;i<=m;i++) ans+=n/(1LL*i*i)*1LL*phi[i];printf("%lld",ans);return 0; }

總結

以上是生活随笔為你收集整理的JZOJ 4919. 【NOIP2017提高组模拟12.10】神炎皇的全部內容,希望文章能夠幫你解決所遇到的問題。

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