关于landau函数
生活随笔
收集整理的這篇文章主要介紹了
关于landau函数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
蘭道函數(shù)是這樣定義的:
?
對于所有非負(fù)整數(shù),蘭道函數(shù)定義為對稱群的所有元素的秩之中,最大的一個(gè)。或者說,是的所有整數(shù)分拆之
中的最小公倍數(shù)。
?
例如 ,,沒有其他5的分割方式能得出一個(gè)更大的最小公倍數(shù),故此。
?
關(guān)于蘭道函數(shù)有一個(gè)結(jié)論:
?
?
?
?
?的值可以用動(dòng)態(tài)規(guī)劃思想求出。?每步添加一個(gè)新數(shù),必然有這兩個(gè)數(shù)互素。
?
?
題目:有一個(gè)正整數(shù)n, n的范圍是[0,1000], 把它拆分成若干個(gè)數(shù)的和,,使得的最小公倍
數(shù)最大,求最大的最小公倍數(shù)S。
?
分析:每一個(gè)正整數(shù)n都可以寫成若干個(gè)素?cái)?shù)的冪和1的和,其lcm最大。所以我們只需要考慮
這種拆分就可以了。
?
import java.math.BigInteger; import java.util.*;public class Hello {static final int N = 2005;static boolean prime[] = new boolean[N];static int p[] = new int[N];static BigInteger dp[][] = new BigInteger[N][N];static BigInteger ans[] = new BigInteger[N];static int k;static void isprime(){k = 1;int i,j;Arrays.fill(prime,true);for(i=2;i<N;i++){if(prime[i]){p[k++] = i;for(j=i+i;j<N;j+=i){prime[j] = false;}}}}static BigInteger max(BigInteger a,BigInteger b){if(a.compareTo(b) == 1) return a;else return b;}static void Work(){for(int i=0;i<N;i++)for(int j=0;j<k;j++)dp[i][j] = BigInteger.ONE;for(int i=1;i<k;i++)dp[2][i] = BigInteger.valueOf(2);for(int i=3;i<N;i++){for(int j=1;j<k;j++){dp[i][j] = dp[i][j-1];int tmp = p[j];while(i >= tmp){dp[i][j] = max(dp[i][j],dp[i-tmp][j-1].multiply(BigInteger.valueOf(tmp)));tmp *= p[j];}}}ans[0] = ans[1] = BigInteger.ONE;ans[2] = BigInteger.valueOf(2);for(int i=3;i<N;i++){ans[i] = BigInteger.ZERO;for(int j=1;j<k;j++)ans[i] = max(ans[i],dp[i][j]);}}public static void main(String[] args){isprime();Work();Scanner cin = new Scanner(System.in);while(cin.hasNext()){int n = cin.nextInt();System.out.println(ans[n]);}} }
?
總結(jié)
以上是生活随笔為你收集整理的关于landau函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: POJ3244(工科数学分析)
- 下一篇: 五边形数定理