чё то нет нормальных программистов у нас в Гродно
эт ты зря, по крайней мере они были...
2Max : после некоторых оптимизаций получилось такое:
int n=100000000;
System.out.println(n);
System.out.println("Started at ->"+new Date());
ArrayList primes= new ArrayList();
primes.add(new Integer(3));
int i_sqrt;
int k=0;
Integer subList[]=null;
loop:for (int i=5 ; i < n ; i += 2)
{
i_sqrt=(int)Math.sqrt(i);
if (((Integer)primes.get(k)).intValue()<=(i_sqrt))
{
k++;
subList = (Integer[])primes.subList(0,k).toArray(new Integer[k]);
}
for (int j = 0; j< k ;j++)
{
if (i%(subList[j]).intValue()==0)
{
continue loop;
}
}
primes.add(new Integer(i));
}
System.out.println("Finish time ->"+new Date());
System.out.println(primes.size());
}
скажу сразу, тут я вырезал кусок из ArrayList и вставлял в простой массив, так получается дешевле в два раза(всё таки массивы быстрее всего:) ) в итоге:
100000000
Started at ->Tue Nov 21 14:36:45 EET 2006
Finish time ->Tue Nov 21 14:38:36 EET 2006
5761454
время почти как сишное
