C++中約數(shù)定理的實(shí)例詳解
C++中約數(shù)定理的實(shí)例詳解
對(duì)于一個(gè)大于1正整數(shù)n可以分解質(zhì)因數(shù):n = p1^a1*p2^a2*......pk^ak,則n的正約數(shù)的個(gè)數(shù)就是 :(a1+1)*(a2+1)*......*(ak+1)
其中a1、a2、a3…ak是p1、p2、p3,…pk的指數(shù)。
用這個(gè)定理求一個(gè)數(shù)的約數(shù)個(gè)數(shù)是非常快的,貼出一道訓(xùn)練題目:
hdu 1492 -求約數(shù)的個(gè)數(shù)
貼出代碼:
//約數(shù)定理的
#include <iostream>
#include <algorithm>
#include <iterator>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <vector>
#include <queue>
#include <set>
using namespace std;
#define ll long long
int main()
{
// freopen("s.cpp","r",stdin);
ll n;
while(scanf("%lld",&n) != EOF)
{
if(!n) break;
ll sum = 1;
/* x = p1^a1*p2^a2*p3^a3...pk^ak
yueshu = (a1+1)*(a2+1)*...*(ak+1)*/
for(ll i = 2; i*i <= n; i++){
int cou = 0;
if(n%i==0){
cou = 1;
n /= i;
while(n%i==0){
cou++;
n /= i;
}
}
if(cou != 0){
sum = sum*(cou+1);
}
}
if(n != 1){
sum = sum*2;
}
if(sum==1 && n==1){
sum = 1;
}
printf("%lld\n",sum);
}
return 0;
}
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
C語(yǔ)言指針與引用的區(qū)別以及引用的三種用法案例詳解
這篇文章主要介紹了C語(yǔ)言指針與引用的區(qū)別以及引用的三種用法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
Windows環(huán)境給FFmpeg集成AVS3解碼器
libuavs3d是AVS3標(biāo)準(zhǔn)的解碼器,支持windows/linux/arm/ios等所有常用平臺(tái),在移動(dòng)端最高支持4K/30fps視頻實(shí)時(shí)解碼,解碼速度大幅領(lǐng)先AV1開(kāi)源解碼器dav1d和aomdec,由于FFmpeg默認(rèn)未啟用libuavs3d,因此需要重新配置FFmpeg,標(biāo)明啟用libuavs3d,然后重新編譯安裝FFmpeg2024-05-05
淺談2路插入排序算法及其簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了淺談2路插入排序算法及其簡(jiǎn)單實(shí)現(xiàn),雖算不上是常用的排序方法,但在數(shù)據(jù)庫(kù)等方面依然有用上的機(jī)會(huì),需要的朋友可以參考下2015-08-08
VS中PCL庫(kù)附加依賴(lài)項(xiàng)配置過(guò)程解析
這篇文章主要介紹了VS中PCL庫(kù)附加依賴(lài)項(xiàng)配置,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07
C++?獲取當(dāng)前正在運(yùn)行函數(shù)的名稱(chēng)
本文主要介紹了C++獲取當(dāng)前正在運(yùn)行函數(shù)的名稱(chēng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

