天天向上
import java.util.Scanner;
public class Prime{
static int []arr=new int[1000001];//标志数组
static int []prime=new int[1000001];
public static void main(String[] args)
{
Scanner In=new Scanner(System.in);
int n=In.nextInt();//n<10^5;
int i,j=2;
boolean flag=false;
prime[0]=2;
prime[1]=3;
for(i=5;i<=n;i+=2){
if(arr[i]==0){//说明不是倍数,1的话是倍数的标志
flag=isprime(i);
}
if(flag){
prime[j++]=i;
}
else{
for(int k=1;i*k<=n;k++){
arr[k*i]=1;
}
}
flag=false;//此步必须要写,为了防止前面多个if并列都走出现的arr[i]==1(是非质数倍数不需要判断),而继续走下面的if出现falg=true直接存入的情况
}
print(prime);
}
public static boolean isprime(int x){
int i;
int k=(int)Math.sqrt(x);
for(i=2;i<=k;i++){
if(x%i==0){
return false;
}
}
if(i==k+1){
return true;
}
return false;
}
public static void print(int []prime){
for(int i=0;i<prime.length;i++){
if(prime[i]!=0){
System.out.printf("%-7d",prime[i]);
if(i+1==prime.length||prime[i+1]==0){ //简化循环便利,当前输出完后,判断下一个是否为0,是直接跳出(按顺序),防止越界加上了前面一句话
break;
}
}
if((i+1)%10==0){//10行换行
System.out.println();
}
}
}
}