const int MAXN = 3000010;
int prime[MAXN];
bool vis[MAXN];
int Prime(int n){
int cnt = 0;
memset(vis, 0, sizeof(vis));
for (int i = 2; i <= n; ++i){
if (!vis[i]) prime[cnt++] = i;
for (int j = 0; j < cnt&&i*prime[j] <= n; ++j){
vis[i*prime[j]] = 1;
if (i%prime[j] == 0) break;
}
}
return cnt;
}
const int MAXN = 3000001;
int prime[MAXN];
bool vis[MAXN];
int phi[MAXN];
void Prime(int n)
{
int cnt = 0;
memset(vis, 0, sizeof(vis));
for (int i = 2; i<n; i++)
{
if (!vis[i])
{
prime[cnt++] = i;
phi[i] = i - 1;
}
for (int j = 0; j<cnt&&i*prime[j]<n; j++)
{
__int64 k = i*prime[j];
vis[k] = 1;
if (i%prime[j] == 0)
{
phi[k] = phi[i] * prime[j];
break;
}
else
phi[k] = phi[i] * (prime[j] - 1);
}
}
}