对于每一个素数,将他的倍数的值改变为与之相同的值。由于素数的选择由小到大,所以对于非素数而言保存的就是他最大素数因子所在的位置;
import java.lang.reflect.Array;
import java.util.Scanner;
public class Main {
private int[] result= new int[1000000];
public void select(){
int sum=0;
boolean flag=true;
for(int i=1;i<1000000;i++) {
if (i == 1) {
result[i] = sum;
sum++;
} else {
for (int j =2; j<=(Math.sqrt(i)); j++) {
if (i % j == 0) {
flag=false;
break;
}
}
if (flag) {
for(int j=i;j<1000000;j+=i)
result[j]=sum;
sum++;
} else
flag = true;
}
}
}
public static void main(String[] args) {
Main fab = new Main();
fab.select();
Scanner Input = new Scanner(System.in);
int result=0;
while (Input.hasNext()) {
int p=Input.nextInt();
System.out.println(fab.result[p]);
}
}
}