关于landau函数

兰道函数是这样定义的:

 

对于所有非负整数n,兰道函数g(n)定义为对称群S_n的所有元素的秩之中,最大的一个。或者说,g(n)n的所有整数分拆之

中的最小公倍数。

 

例如 5=2+3lcm(2,3)=6,没有其他5的分割方式能得出一个更大的最小公倍数,故此g(5)=6

 

关于兰道函数有一个结论:

 

 

 

 

g(n) 的值可以用动态规划思想求出。 每步添加一个新数,必然有这两个数互素。

 

 

题目:有一个正整数n, n的范围是[0,1000], 把它拆分成若干个数的和,,使得的最小公倍

最大,求最大的最小公倍数S。

 

分析:每一个正整数n都可以写成若干个素数的幂和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]);
		  }
	 }
}


 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python中的qutip包画出非线性Landau-Zener系统哈密顿量加上反绝热哈密顿量随时间演化的绝热布居数转移的示例代码和图形。 ```python import numpy as np import matplotlib.pyplot as plt from qutip import * # Define the parameters Delta = 0.5 # energy bias g = 1 # coupling strength epsilon = 0.5 # nonlinear strength T = 10 # total time dt = 0.05 # time step size times = np.arange(0, T + dt, dt) # Define the Hamiltonian H0 = -Delta / 2 * sigmaz() - g * sigmax() H1 = -epsilon * sigmax() - 0.5 * g * sigmaz() * sigmax() H = [H0, [H1, lambda t: t < T / 2], [-H1, lambda t: t >= T / 2]] # Define the initial and final states psi0 = basis(2, 0) psi1 = basis(2, 1) # Calculate the adiabatic evolution result = mesolve(H, psi0, times, [], [psi0, psi1]) # Plot the results plt.plot(result.times, result.expect[0], label="Adiabatic Population in |0>") plt.plot(result.times, result.expect[1], label="Adiabatic Population in |1>") plt.xlabel("Time") plt.ylabel("Population") plt.title("Adiabatic Population Transfer in Nonlinear Landau-Zener System") plt.legend() plt.show() ``` 该代码使用了qutip包的mesolve函数计算了非线性Landau-Zener系统哈密顿量加上反绝热哈密顿量的时间演化,并绘制了在演化过程中的绝热布居数转移图。在这个例子中,我们将系统的总演化时间设置为10个单位时间,时间步长为0.05个单位时间,使用sigmax(), sigmaz()函数来定义哈密顿量中的X和Z旋转矩阵,使用basis()函数定义了系统的初始和最终状态。通过调用mesolve()函数,计算系统在不同时间下的演化状态,并通过plot()函数绘制了结果。 下图是生成的绝热布居数转移图。 ![Adiabatic Population Transfer in Nonlinear Landau-Zener System](https://i.imgur.com/suIJRyI.png)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值