Question: Mathophobia
I don’t understand why it is giving WA for first two cases. Can somebody explain the flaw in the logic? Also if possible, I’d like an explanation for why is it TLE-ing?
#include <bits/stdc++.h>
using namespace std;
void sieve (long long limit, set <long long> &prime) {
vector <bool> mark (limit+1, true);
for (long long i=2; i*i<mark.size(); i++) {
if (mark[i]==true) {
for (long long j=i*2; j<mark.size(); j+=i)
mark[j]=false;
}
}
for (long long i=2; i<mark.size(); i++) {
if (mark[i]==true) {
prime.insert(i);
}
}
}
int main() {
int T;
cin>>T;
while (T--) {
long long N;
cin>>N;
set <long long> prime;
sieve(N, prime);
long long ans=-1;
for (auto it=prime.begin(); it!=prime.end(); it++) {
long long a = log (N)/log(*it);
if (prime.find(a)==prime.end())
continue;
ans = max(ans, (long long)(pow((*it), a)));
}
cout<<ans<<endl;
}
return 0;
}