1. 程式人生 > >[合集]數論小結論(五分鐘棄坑系列)

[合集]數論小結論(五分鐘棄坑系列)

++ name 給定 寫到 clu span stream inline post

※見多識廣※
結論來源於ACdreamer
NEFU - 117 素數定理
題意:給定\(n\),求\(10^n\)範圍內素數的個數的位數
\(x\)足夠大時,\(π(x)=\frac{x}{ln(x)}\)
最近做的題真是水破天際

#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
ll n;
int main(){
    while(cin>>n){
        double ans=(double)n-log10(n)-log10(log(10));
        cout<<(ll)(ans+1
)<<endl; } return 0; }

HDU - 2685 gcd定理
題意:求\(gcd(a^m-1,a^n-1)\)
定理:\(gcd(a^m-1,a^n-1)=a^{gcd(m,n)}-1\)
其實補上\((a-1)\)展開也是等比數列形式的,那肯定是一個\(a^x-1\)的數
更為普遍的定理也記下:對於\(a>b\),\(gcd(a^m-b^m,a^n-b^n)=a^{gcd(m,n)}-b^{gcd(m,n)}\)

#include<bits/stdc++.h>
using namespace std;
typedef long long
ll; ll gcd(ll a,ll b){return b?gcd(b,a%b):a;} ll fpw(ll a,ll n,ll mod){ ll ans=1; while(n){ if(n&1) ans=(ans*a)%mod; n>>=1;a=(a*a)%mod; } return ans; } int main(){ ll a,m,n,k,T; cin>>T; while(T--){ cin>>a>>m>>n>>k; cout<<(fpw(a,gcd(m,n),k)-1
+k)%k<<endl; } return 0; }

HDU - 2582 gcd與組合數的定理
\(gcd({n\choose i})\)\(n\)含有多個素因子則為1,否則為該因子

//此處應有代碼

不更了,寫到紙質文件比較好

[合集]數論小結論(五分鐘棄坑系列)