package lessones02;
import others.PrimeGetter;
import lessones01.LinkedList;
public class ArrayUtil{
public static void reverseArray(int[] arg_arr){
for(int i = arg_arr.length/2;i>0;i--){
//��Ϊȷ����int���͵��������Կ�����ô��
arg_arr[i-1] ^= arg_arr[arg_arr.length - i];
arg_arr[arg_arr.length - i] ^= arg_arr[i-1];
arg_arr[i-1] ^= arg_arr[arg_arr.length - i];
}
}
public static int[] removeZero(int[] arg_arr){
int zeroNum = 0;
//��������漸��for��������������ôд������(���)��õ㣬���ǿ��ɶ��Ի�������
for(int i=0;i<arg_arr.length;i++){if(arg_arr[i] == 0){zeroNum++;}}
int[] newArray = new int[arg_arr.length - zeroNum];
int f = 0;
for(int x=0;x<arg_arr.length;x++){if(arg_arr[x] != 0){newArray[f++] = arg_arr[x];}}
return newArray;
}
public static int[] merge(int[] arg_arr1,int[] arg_arr2){
int s = 0;
int f1=0;
int f2=0;
//�о������ƴ��룬�����벻������ô�Ż�
for(;f1<arg_arr1.length&&f2<arg_arr2.length;s++){
if(arg_arr1[f1] == arg_arr2[f2]){
f1++;
f2++;
}else if(arg_arr1[f1] > arg_arr2[f2]){
f2++;
}else/*if(arg_arr1[f1] < arg_arr2[f2])*/{
f1++;
}
}
int[] arr = new int[s];
for(s=0,f1=0,f2=0;f1<arg_arr1.length&&f2<arg_arr2.length;s++){
if(arg_arr1[f1] == arg_arr2[f2]){
arr[s] = arg_arr1[f1];
f1++;
f2++;
}else if(arg_arr1[f1] > arg_arr2[f2]){
arr[s] = arg_arr2[f2];
f2++;
}else/*if(arg_arr1[f1] < arg_arr2[f2])*/{
arr[s] = arg_arr1[f1];
f1++;
}
}
return arr;
}
public static int[] grow(int[] arg_arr,int arg_size){
int[] arr = new int[arg_arr.length + arg_size];
int s = arg_arr.length;
for(int i=0;i<s;i++){arr[i] = arg_arr[i];}
int x = s;
for(s+=arg_size;x<s;x++){arr[x] = 0;}
return arr;
}
public static int[] fibonacci(int max){
return makeFibonacci(0,1,1,max);
}
private static int[] makeFibonacci(int num,int a,int b,int max){
if(a < max){
int[] temp = makeFibonacci(num+1,b,a+b,max);
temp[num] = a;
return temp;
}else{
return new int[num];
}
}
public static int[] getPrimes(int max){
int i=0;
for(;PrimeGetter.get(i)<max;i++){}
int[] arr = new int[i];
for(i--;i>=0;i--){arr[i] = PrimeGetter.get(i);}
return arr;
}
private static int[] two_s_TimesEnd = {8,6,2,4};
public static int[] getPerfectNumbers(int arg_num){
LinkedList<Integer> arr = new LinkedList<Integer>();
for(int i=2;;i++){
int z = (int)Math.pow(2,i) - 1;
int zz = z*two_s_TimesEnd[i&3];
if(zz%10 == 8||zz%10 == 6){
if(PrimeGetter.isPrime(z)){
int zzz = (int)Math.pow(2,i-1)*z;
if(zzz<arg_num&&zzz>0){
arr.add(zzz);
System.out.println(zzz);
}else{
break;
}
}
}
}
int[] numbers = new int[arr.size()];
for(int i =0;i<arr.size();i++){numbers[i] = arr.get(i);}
return numbers;
}
public static void main(String[] args){
int[] a = fibonacci(15);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
System.out.println("=========================");
a = grow(a,5);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
System.out.println("=========================");
a = removeZero(a);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
System.out.println("=========================");
reverseArray(a);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
System.out.println("=========================");
a = getPrimes(1000);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
System.out.println("=========================");
a = getPerfectNumbers(40000000);
for(int i=0;i<a.length;i++){
System.out.println(a[i]);
}
System.out.println("=========================");
}
}