問題描述如下:
「三角數為符合如下標準:
第7個數為1+2+3+4+...+7=28,前幾個三角數為:1,,3,6,10,15,21,28......
讓我們來看一下他們的因子:
1:13:1,3
6:1,2,3,6
10:1,2,5,10
15:1,3,5,15
21:1,3,7,21
28:1,2,4,7,14,28
因子個數超過5的第乙個三角數為28,求因子個數超過500個的第乙個三角數?」
**實現如下:
/**
* 獲得n的因子的個數
* * @param n
* @return
*/private static int getfactornumber(int ********number)
} return result;
} /**
* 獲得因子個數超過n個的三角數 此數符合某個標準如下: 如第7個數為1+2+3+4+5+6+7=28,
* 前幾個數為1,3,6,10,15,21,28,36...
* t(n)=n(n+1)/2
* @param n
* @return
*/private static int get********number(int n)
return ********number;
}
執行以上程式,要很長時間才能夠得到結果76576500。
進行一些優化,
/**
* 獲得n的因子的個數
* * @param n
* @return
*/private static int getfactornumber1(int ********number)
if (i * i == ********number)
} return result;
}
還有一些其他的方式來做,可以做乙個提示,
1=2^0+3^0+5^0+7^0...+p^0,因子個數為(0+1)*(0+1)*(0+1)...*(0+1)=1
3= 2^0+3^1+5^0+7^0...+p^0,因子個數為(0+1)*(1+1)*(0+1)...*(0+1)=2
6=2^1+3^1+5^0+7^0...+p^0,因子個數為(1+1)*(1+1)*(0+1)...*(0+1)=4
28 = 2^2+3^0+5^0+7^1...+p^0,因子個數為(2+1)*(0+1)*(0+1)*(1+1)...*(0+1)=6
t(n) = 2^a1+3^a2+4^a3+...+p^ap,因子個數為(a1+1)*(a2+1)*(a3+1)*(a4+1)...*(ap+1)=n
到此結束。
請不吝賜教。
@anthor clumsybirdz
求整數的因子個數,因子之和,尤拉計畫12
求乙個數的因子個數,公式 別人的部落格 include include include include include include includeusing namespace std const int m 10000005 1e7的陣列 int pr 5000005 k 0 bool vis...
求乙個正整數的因子個數
如 整數 15,有1,15,3,5 共4個因子。要求演算法的複雜度為o sqrt n 首先想到的方法是 逐個列舉,從 1 到 n 2 1 當然也可以是 從 1 到 n 這樣演算法的複雜到至少是o n 的,而且,其中還要去重,比如 24 4 6 6 4,這樣還要分配空間來存放找到的因子,並且每次新增的...
數學演算法 求乙個數的質因子
兩種方法,第一種是將所有的素數篩選出來,第二種直接迴圈就行了 第二種更加的高效 第一種方法其實就是先將素數篩選出來然後再計算,第二種是直接計算。第一種的 includeusing namespace std const int max 1e7 7 bool prim max vector ve 素數...