HDU 1299 求因子個數

2021-06-08 16:19:46 字數 762 閱讀 9472

現在假設 y = n +k (k為正整數) ,

那麼帶入公式,可以得出 x = (n*(n+k))/k = n*n/k + n; 由於x 是正整數,現在的關鍵問題就是

要求出 n*n/ k 有多少組正整數的可能,顯然,所要求的就是 n*n 因子的個數

整數分解:

任何乙個正整數都可以表示成素數的x次方之積,所以本題就被轉化成了求n ^2的素因子個數;

先把n分解得到 n = p1^e1 * p2^e2 * ......*pr^er 其中p是< n 的素數那麼n 的素因子, 則n的因子個數 k = (e1 + 1) * (e2 + 1) * (e3 + 1)*......

所以:n ^2的因子數是k = (2*e1+1) * (2*e2+1)* (2*e3+1)......

這個題還要注意一點就是當n是素數的時候,很顯然 k *= 3

#include

#include

#include

using namespace std;

const int n=40000;

int prime[n],p;

bool mark[n];

void init()}}

}int main()

ans*=(2*cnt+1);}}

if(n>1) ans*=3;

printf("%d\n\n",ans/2+1); 

//很顯然ans為奇數(全是奇數相乘),中間因子為n(只算一種)

}return 0;

}

HDU1299 素數分解

include includeusing namespace std bool isprime 100000 int prime 10000 tot 0,temp,n long long ans int main int t scanf d t for int kase 1 kase t kase ...

求因子和與因子個數

求因子和與因子個數 包含1和本身 所有因子個數 n 與所有因子的和 n 都是乘 積 性函式。定義1 因子和函式 定義為整數n的所有正因子之和,記為 n 定義2 因子個數函式 定義為正整數n的所有正因子個數,記為 n 定理1 設p是乙個素數,a是乙個正整數,那麼 n 1 p p 2 p a p a 1...

求個數 素數因子

public class primefactor public static void main string args for int i 2 i 100 i system.out.print i 的素數因子有 for int j 2 j2的素數因子有 3的素數因子有 4的素數因子有 2,5的素數...