最近在看算法,练习了一下简单的两个算法,贴着以后给自己看吧
/***************************求素数的筛数算法*******************/
public class AMain {
/**求素数的筛数法
* @param args
*/
public static void main(String[] args)
{
AMain a=new AMain();
a.math();
}
public void math()
{
boolean[] prime=new boolean[100];
for(int a=0;a<100;a++)//判断下标是否为偶数;是偶数标为false
{
if(a%2==0)
prime[a]=false;
else
prime[a]=true;
}
for(int i=3;i<Math.sqrt(100);i++)//将下标的倍数的数全标为false;即可筛掉合数
{
for(int j=i+i;j<100;j=j+i)
{
prime[j]=false;
}
}
for(int p=10;p<100;p++)
{
if(prime[p])
System.out.println(p);
}
}
}
/**********************************报数问题*************************/
/**
* 算法:求报数后剩下的人原先的位置
* @author zmm
*
*/
public class BMain
{
public static void main(String[] args)
{
System.out.println("剩余的人原先所在位置为:"+huan(50,1));
}
public static int huan(int n,int m)
{
List<Integer> list=new LinkedList<Integer>();
for(int i=0;i<n;i++)
{
list.add(new Integer(i+1));
}
int removed=-1;
while(list.size()>1)
{
removed=(removed+m)%list.size(); //得到要删除的下标
list.remove(removed--); //下标被删除以后后面的元素前进或者说是左移一位。
}
return ((Integer)list.get(0)).intValue();
}
}