#include <stdio.h>
#include <stdlib.h>

#define N 10000001
int factor[N], sum_of_divisor[N];

int gcd(int, int);

int main(int argc, char *argv[]) {
    int i, j, prime, current, x, g;
    double previous, tmp;
    
    for (i = 2; i < N; ++i) {
        if (factor[i] == 0) {
            factor[i] = i;
            for (j = i + i; j < N; j += i) factor[j] = i;
        }
    }
    printf("10^7以下の超過剰数は以下です．\n");
    printf("1 (1)");
    sum_of_divisor[1] = 1;
    previous = 1.0;
    for (i = 2; i < N; ++i) {
        prime = factor[i], current = i, x = 1;
        while (current % prime == 0) {
            current /= prime;
            x = x * prime + 1;
        }
        sum_of_divisor[i] = x * sum_of_divisor[current];
        tmp = sum_of_divisor[i] * 1.0 / i;
        if (tmp > previous) {
            g = gcd(i, sum_of_divisor[i]); // 既約分数で表示する
            if (i == g) printf("-> %d (%d)", i,sum_of_divisor[i]/g);
            else printf("-> %d (%d/%d)", i,sum_of_divisor[i]/g,i/g);
            previous = tmp;
        }
    }
    printf("\n");
    
    return 0;
}

// 最大公約数を求める関数
int gcd(int x, int y)
{
    int r;

    // ユーグリッドの互除法
    while((r = x % y) != 0)  // yで割り切れるまでループ
    {
        x = y;
        y = r;
    }
    return y;
}
