Cách thay đổi giá trị phần tử trong vector và cách viết hàm liên quan đến vector

#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?