a740
輸入說明 :
每行一个正整数,x<20000000, 以EOF为结束
輸出說明 :
对应的因数和
這題跟b763很像都是先建質數表
但是這題質數表的型態要用bool,用int的話,會超出記憶體限制
#include<stdio.h>
#include<string.h>
#include <vector>
using namespace std;
bool P[20000000];
vector<int> p;
int main()
{
memset(P,1,sizeof(P));
long long int i;
long long int j;
for(i=2;i<20000000;i++)
{
if(P[i])
{
p.push_back(i);
for(j=i*i;j<20000000;j+=i)
P[j] = false;
}
}
int n;
long long int sum;
while( scanf("%d", &n) != EOF )
{
sum = 0;
for(i=0; i<p.size(); i++)
{
while( n%p[i] == 0 )
n/= p[i],sum +=p[i];
if(n==1) break;
}
if(n==1) printf("%lld\n", sum);
else printf("%lld\n", sum+n);
}
}