大整數約數問題

2021-08-05 20:38:39 字數 2721 閱讀 7564

//來自kuangbin的acm模板

//大整數約數和

/*poj 1845 sumdiv

求a^b的所有約數之和%9901

*//*

大整數的約數和 三個問題

1.約數和結論-對於乙個大整數n,他的因數分解式為 ( a1^x1 ) * ( a2 ^ x2) * (a3^x3 )... ,那麼約數和 sum = ( 1 + a1 + a1^2 + ... a1^x1 ) * ( 1 + a2 + a2^2 + ... a2^x2 ) * ...

2.等比數列和的遞迴表示式:

1 + p + p^2 + p^3 +...+ p^n

= (n為奇數時,一共有偶數項)(1 + p + p^2 +...+ p^(n/2)) * (1 + p^(n/2+1))

= (n為偶數時,一共有奇數項)(1 + p + p^2 +...+ p^(n/2-1)) * (1+p^(n/2+1)) + p^(n/2)

3.因數分解

*/ #include

#include

#include

#include

#include

using namespace std;

#define mod 9901

//******************************************

//素數篩選和合數分解

const int maxn=10000;

int prime[maxn+1];

void getprime()

}}long long factor[100][2];

int fatcnt;

int getfactors(long long x)

fatcnt++;}}

if(tmp!=1)

return fatcnt;

}//******************************************

long long pow_m(long long a,long long n)//快速模冪運算

n>>=1;

tmp*=tmp;

tmp%=mod;

}return res;

}//計算1+p+p^2+````+p^n , 計算等比數列的和對mod取模演算法

//等比數列和的遞迴運算,複雜度o(logn * logn)

//還可以使用等比數列和公式求解,此處使用等比數列的遞推公式求解

long long sum(long long p,long long n)

else

return ((1+pow_m(p,n/2+1))%mod*sum(p,n/2-1)+pow_m(p,n/2)%mod)%mod;

}int main()

printf("%i64d\n",ans);

}return

0;}

//hdu6069

//大整數約數的個數

//大整數約數個數結論:對於大整數n的因數表示式 n = x1^a1 * x2^a2 ...xn^an

//他的約數的個數是sum = ( 1 + a1 ) *(1 + a2 ) ... ( 1 + an )

//本題還要注意因數分解的方法,認識到給定的資料範圍的特殊性,就是對於1e6以外的數,他要麼是質數,要麼他是1e6以內的質數的冪積和1e6以外的乙個質數的冪積,不可能是1e6以外的兩個質數的冪積,因為那樣一定超過1e12.同時因為l和r的間隔不大於1e6,可以考慮大區間求質數的方法進行因數分解

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std ;

const

int maxn = 1e6 +10 ;

const

int maxm = 1e6 ;

typedef

long

long ll ;

const ll mod = 998244353 ;

bool notprime[maxn] ;

ll prime[maxn] ;

void getprime()

}ll l , r , k , ans ;

ll dp[maxn] ;

ll sp[maxn] ;

void solve()

for(ll i = 0 ; i< r-l + 1 ;i++)

memset( sp , -1 , sizeof( sp )) ;

for( ll i = 1 ;i<= prime[0] && prime[i] <= r ;i++)

*/

ll pos = ( ll ) j * prime[i] - l ;

while( dp[pos] % prime[i] == 0 )

if( sp[pos] == -1)

else

// cout<}}}

}int main()

}

printf("%lld\n" , ans % mod);

}return

0 ;}

大整數問題

題目描述 有乙個k 1 k 80 位的十進位制正整數n,設計乙個程式,找到滿足條件 p3 p2 3p n的p的最大值。測試用例 輸入 1000000000000001000000000000003000000000000001 輸出 100000000000000 複製 include includ...

大整數 問題

高精度除法 利用了 減法 原理 例如 a 13455 除以 b 3 先把 3 增大為 30000 不夠減 右移一位 變為 3000 這樣不斷的減 直到 不夠減 為 1456 則 可知 商的 千位 為 4 因為 3000 是 3 的 1000倍 這樣 3000 在右移一位 300 依此類推 得到 百位...

大整數相乘問題

先把好的部落格貼上 明天再說。include include includeusing namespace std string型別轉換成int型別 long string to num string str 整形數轉換為string型別 string num to string int intva...