➤ Problem Link : ETF
👉 Hint : Precompute smallest prime factor for every number in range
✅ C++ Solution :
#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define si 1000000
int main() {
int t;
ll n;
ll i,j;
ll a[si+1];
for(i=1;i<=si;i++)
a[i]=i;
for(i=2;i*i<=si;i++)
{
if(a[i]==i)
{
for(j=i*i;j<=si;j+=i)
{
if(a[j]==j)
a[j]=i;
}
}
}
cin>>t;
while(t--)
{
cin>>n;
set<int>s;
set<int>:: iterator it;
int ans=n;
while(n!=1)
{
s.insert(a[n]);
n/=a[n];
}
for(it=s.begin();it!=s.end();it++)
{
ans*=(1.0-1.0/((float)*it));
}
cout<<ans<<endl;
}
return 0;
}
Thank you for your patience reading. If you enjoyed this post, I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Whatsapp or Facebook.
😇Happy Learning!!
