-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathCode.cpp
39 lines (36 loc) · 1.15 KB
/
Code.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
VL sieve(ll n) {
ll check[n+5];
VL primes ;
memset(check,0,sizeof(check));
check[1] = 1 ;
for ( ll i = 4 ; i <= n ; i = i+2) check[i] = 1 ;
for ( ll i = 3 ; i*i <= n ; i += 2) {
if (!check[i]) {
for ( ll j = i*i ; j <= n ; j += 2*i){
check[j] = 1 ;
}
}
}
for ( ll i = 1 ; i <= n ; i++) if (!check[i]) primes.PB(i);
return primes ;
}
ll sumofdivisors(ll n) {
ll primerange = (ll)sqrt(n)+1 ;
VL primes = sieve(primerange);
if ( n == 1) return 1 ;
ll sod = 1 ;
for ( ll i = 0 ; primes[i] <= sqrt(n) && i < primes.size() ; i++) {
if ( n%primes[i] == 0 && primes[i] <= n) {
ll cnt = 0 ;
ll val = 1 ;
while (!(n%primes[i])) {
n = n/primes[i];
cnt = cnt+val ;
val = val*primes[i];
}
sod = sod*(cnt+val);
}
}
if ( n > 1) sod = sod*(n+1);
return sod ;
}