➤ 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!!