约瑟夫环问题用java怎么解决,有简单点的方法吗

一组人(n)个,围成一圈,从某人开始数到滴三个的人出列,在接着从下一个人开始数,最终输出最终出列的人(约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3,...,n)分别表示)围坐在一张圆桌周围。从编号k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去,知道圆桌周围的人全都出列。

这个不是很简单吗,自己写个,条件已经有了

不算输入输出,只有不到10行

 import java.util.Scanner;
public class countMethod {
 public static void main(String[] args) {
  Scanner sc=new Scanner(System.in);

  //接收用户输入,获得总人数N
  System.out.println("请输入参与的总人数:");
  int N=sc.nextInt();

  //接收用户输入,获得出列人员的编号M
  System.out.println("请输入出列的人的编号:");
  int M=sc.nextInt();

  //建立布尔型的数组,长度为总人数
  Boolean rs[]=new Boolean[N];

  //初始化布尔型数组,初始值均为true
  for(int i=0;i<N;i++){
   rs[i]=true;
   //System.out.println(rs[i]);
  }

  int n=N;//剩余的人数
  int m=0;//报数的编号



  while(n>1){
   for(int j=0;j<N;j++){
    if(rs[j]){
     m++;
     if(m==M){
      m=0;
      rs[j]=false;
      n--;
      //System.out.println(rs[j]);
     }

    }

   }

  }

  //打印出最后留下来的人员的编号
  for(int k=0;k<N;k++){ 
   if(rs[k]){
    System.out.println("最后留下的是第"+(k+1)+"号。");
    break;

   }
  }

 }
}
 int Joseph(int n, int m)   
{  
    int fn=0;  
    for (int i=2; i<=n; i++)   
    {  
        fn = (fn+m)%i;   
    }  

    return fn;  
}