如果一个正整数,它的质因数只包含2,3,和5,那么这个数满足条件。
同时,特别规定1也是满足条件的数字。
示例:前10个满足条件的数字是1,2,3,4,5,6,8,9,10,12。
编写一个函数,返回第n个满足条件的数。
解题思路:
质因数只包含2,3,5,即其他的质数以及他们的倍数都不在此数组中,求出这些数,再删除即可。
public class ZhaoHang3 {
public static void main(String[] args) {
int a;
int N = 10000;
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();//个数
ArrayList<Integer> list = new ArrayList<Integer>();
//求6到n以内质数
for (int i = 6; i < N; i++) {
for (a = 2; a <= (int)i/2; a++) {
if (i % a == 0) {
break;
}
}
if (a > (int)i/2 ) {
//质数
int tmp = i;
System.out.println(tmp);
//质数的倍数
for(int j=1;j<N;j++){
tmp *=j;
if(j*tmp<N)
list.add(tmp);
else
break;
}
}
}
//排序
int[] deleteNum = new int[list.size()];
for(int i=0;i<deleteNum.length;i++){
deleteNum[i] = list.get(i);
}
shellsort(deleteNum);
System.out.println("6到N的所有质数和质数的倍数"+Arrays.toString(deleteNum));
ArrayList<Integer> res = new ArrayList<>();
for(int i=0;i<N;i++){
res.add(i);
}
//倒序删除
for(int i=deleteNum.length-1;i>=0;i--){
int index = deleteNum[i];
res.remove(index);
}
//删除0
res.remove(0);
//获取第n个
System.out.println(res.get(n-1));
}
/**
* 希尔排序算法
* @param a
*/
public static void shellsort(int[] a ){
int j;
int tmp;
for(int gap=a.length/2;gap>0;gap/=2){
for(int i=gap;i<a.length;i++){
for(j=i;j>=gap;j-=gap){
if(a[j]<a[j-gap]){
tmp=a[j];
a[j]=a[j-gap];
a[j-gap]=tmp;
}
}
}
}
}
}