日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

發布時間:2025/3/15 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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】神炎皇的全部內容,希望文章能夠幫你解決所遇到的問題。

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