#include<bits/stdc++.h>
using namespace std;
vector < int > a(1000000);
vector < int > b(1000000,0);
int minprime(int n)
{
int min[n+1];
for(int i=2;i*i<=n;i++)
{
if(min[i]==0)
{
for(int j=i*i;j<=n;j+=i)
{
if(min[j]==0)
{
min[j]=i;
}
}
}
}
for(int i=2;i<=n;i++)
{
if(min[i]==0)
{
min[i]=i;
}
}
return min[n];
}
void tinh(vector < int > a)
{
for(int i=2;i<=1000000;i++)
{
a.push_back(minprime(i));
}
}
void tong(vector < int > a, vector < int > b)
{
tinh(a);
for(int i=2;i<a.size();i++)
{
b.at(a.at(i))+=1;
}
}
void nhap(int c[], int n)
{
for(int i=0;i<n;i++)
{
scanf("%d",&c[i]);
}
}
void hien(int c[], vector < int > b,int n)
{
for(int i=0;i<n;i++)
{
printf("%d\n",b.at(c[i]));
}
}
main()
{
int c[100000],n;
scanf("%d",&n);
nhap(c,n);
hien(c,b,n);
}
Mình mới chỉ học qua cách dùng vector nên không biết sai chỗ nào mà đáng lẽ trong vector a sẽ lưu các ước nguyên tố nhỏ nhất từ 1->10^6, còn vector b là số lần lặp lại của các ước nguyên tố trong vector a, vd ứng với n=2 thì a[2]=2 và b[2]=500000, mọi người sửa giúp với
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?