Sum of Divisor (SOD) using 2 Method

Standard
একটি সংখ্যা n দেওয়া আছে। এর বিভাজকের যোগফল বের করতে হবে।

Method 1: রোট পর্যন্ত লোপ চালিয়ে।

/**Bismillahir Rahmanir Rahim.**/

#include <bits/stdc++.h>

using namespace std;


int SOD(int n)
{
    int limit = sqrt(n+1);
    int res = 0;
    for(int i=1; i<=limit; i++)
        if(!(n%i))
        {
            res += i;
            res += (n/i);
        }
    if(limit*limit==n) res -= limit;
    return res;
}
int main()
{
    int ans, n;
    scanf("%d", &n);
    ans = SOD(n);
    printf("%d\n", ans);
    return 0;
}
Method 2: প্রাইম ফ্যাক্টরাইজড করে।

/**Bismillahir Rahmanir Rahim.**/

#include <bits/stdc++.h>

using namespace std;

int prime[4009], x=1;

void seivePrime()
{
    char prime_b[10000];
    memset(prime_b, 0, sizeof(prime_b));
    int till = 10000;
    for(int i=4; i<=till; i+=2)
        prime_b[i] = 1;
    int limit = sqrt(till)+1;
    for(int i=3; i<=limit; i+=2)
        if(!prime_b[i])
            for(int j=i*i; j<=till; j+=(i*2))
                prime_b[j] = 1;
    prime[0] = 2;
    for(int i=3; i<=till; i+=2)
        if(!prime_b[i])
            prime[x++] = i;
}
int SOD(int n)
{
    int till = sqrt(n+1), res=1;
    for(int i=0; prime[i]<=till; i++)
    {
        if(n%prime[i]==0)
        {
            int tmpSum = 1, p = 1;
            while(n%prime[i]==0)
            {
                n/=prime[i];
                p *= prime[i];
                tmpSum += p;
            }
        till = sqrt(n);
        res *= tmpSum;
        }
    }
    if(n>1) res *= (n+1);
    return res;
}
int main()
{
    seivePrime();
    int ans, n;
    scanf("%d", &n);
    ans = SOD(n);
    printf("%d\n", ans);
    return 0;
}