Sửa lỗi Runtime Error

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const ll M=1e6+5;
const ll H=1e9+7;
ll f[M],a[M];
void sang()
{
	memset(f,0,sizeof(f));
	for(int i=0;i<=M;i++)
	f[i]=i;
	for(int i=2;i<=M;i++)
	{
		if(f[i]==i)
		for(int j=i;j<=M;j+=i){
		   f[j]-=f[j]/i;
		   a[j]=f[j];}
	}
}
void tinh()
{
	sang();
	for(int i=2;i<=M;i++)
    for(int j=2*i;j<=M;j+=i)
	f[j]=((f[j]%H)*(a[i]%H))%H;
}
int main()
{
	tinh();
	ll t,n;
	cin >> t;
	while(t--)
	{
		cin >> n;
		cout << f[n] << endl;
	}
}

Code này mình dùng để tính tích các totient của ước của n, khi chạy thử thì đúng nhưng khi post code để nộp bài thì bị Runtime Error, ko biết có sai trường hợp thử nào ko? Mọi người xem giúp mình với.

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?