Tính tổng các ước của số n (n≤1012).
Input
Dòng đầu chứa số bộ test.
Các dòng sau, mỗi dòng chứa 1 số nguyên dương n (n≤1012).
Output
Mỗi test in trên 1 dòng chứa 1 số nguyên là tổng các ước của test tương ứng.
Example
Input:
2
5
6
Output:
6
12
//Tong uoc
#include<iostream>
#include<math.h>
void Tong_Uoc(long long n)
{
if( n ==1)
{
std::cout<<1;
return;
}
long long k =sqrt(n) ,sum = 0;
if( n % 2 == 0)
{
for( int i =1; i<= k; ++i)
if( n%i == 0)
{
sum += i ;
sum += n/i;
}
}
else
{
for( int i =1;i<= k;i+=2)
if( n%i == 0)
{
sum += i ;
sum += n/i;
}
}
if( k*k == n)sum -= k;
std::cout<< sum ;
}
int main()
{
long long n;
int slg; //So luong bo test
std::cin>>slg;
for( int i=slg;i>0;--i)
{
std::cin>>n;
Tong_Uoc(n);
std::cout<<std::endl;
}
//system("pause");
return 0;
}
0 comments:
Post a Comment