基于相同的算法,c++AC,JAVA T掉了。
C++:
#include<stdio.h>
#include<string.h>
#define N 1000000
int ans[N+5];
void Init()
{
memset(ans,0,sizeof(ans));
int count=1;
for(int i=2; i<=N; i++)
{
if(ans[i]==0)
{
for(int j=i; j<=N; j+=i)
ans[j]=count;
count++;
}
}
return ;
}
int main()
{
Init();
int n;
while(scanf("%d",&n)!=EOF)
printf("%d\n",ans[n]);
return 0;
}
JAVA:
import java.util.*;
class A {
int[] ans = new int[1000005];
public void setAns() {
int count = 1;
for (int i = 2; i <= 1000000; i++) {
if (ans[i] == 0) {
for (int j = i; j <= 1000000; j += i)
ans[j] = count;
count++;
}
}
}
public int getAns(int n) {
return ans[n];
}
}
public class Main {
public static void main(String[] args) {
Scanner inScanner = new Scanner(System.in);
A a = new A();
a.setAns();
while (inScanner.hasNextInt())
System.out.println(a.getAns(inScanner.nextInt()));
}
}