#include <iostream>
#include <bits/stdc++.h>
const int maxn=20000001;
bool isprime[maxn+10];
using namespace std;
int main()
{
memset(isprime, 1 ,maxn);
isprime[0]=0;
isprime[1]=0;
for(int i =2; i<=maxn;i++)
{
for(int j=2*i; j<=maxn; j+=i)
{
isprime[j]=0;
}
}
unsigned long long int n;
while(cin>>n)
{
unsigned long long int sum=0;
for(int i=2; i<=maxn; i++){
if(isprime[i])
{
while(n%i==0)
{
sum+=i;
n/=i;
if(n==1)
break;
}
}
}
cout<< sum <<endl;
}
return 0;
}
自我測試正確,但是上機卻TLE,能請教原因嗎?
#include
#include <bits/stdc++.h>
const int maxn=20000001;
bool isprime[maxn+10];
using namespace std;
int main()
{
memset(isprime, 1 ,maxn);
isprime[0]=0;
isprime[1]=0;
for(int i =2; i<=maxn;i++)
{
for(int j=2*i; j<=maxn; j+=i)
{
isprime[j]=0;
}
}
unsigned long long int n;
while(cin>>n)
{
unsigned long long int sum=0;
for(int i=2; i<=maxn; i++){
if(isprime[i])
{
while(n%i==0)
{
sum+=i;
n/=i;
if(n==1)
break;
}
}
}
cout<< sum <<endl;
}
return 0;
}
自我測試正確,但是上機卻TLE,能請教原因嗎?
maxn 開小一點
#include
#include <bits/stdc++.h>
const int maxn=20000001;
bool isprime[maxn+10];
using namespace std;
int main()
{
memset(isprime, 1 ,maxn);
isprime[0]=0;
isprime[1]=0;
for(int i =2; i<=maxn;i++)
{
for(int j=2*i; j<=maxn; j+=i)
{
isprime[j]=0;
}
}
unsigned long long int n;
while(cin>>n)
{
unsigned long long int sum=0;
for(int i=2; i<=maxn; i++){
if(isprime[i])
{
while(n%i==0)
{
sum+=i;
n/=i;
if(n==1)
break;
}
}
}
cout<< sum <<endl;
}
return 0;
}
自我測試正確,但是上機卻TLE,能請教原因嗎?
maxn 開小一點
AC 了! 謝謝!