MYSTERY - Số huyền bí

Tác giả: ladpro98

Ngôn ngữ: Pascal

program mystery;
uses    math;
const   loop=84420;
        base=20122007;
var     pow:array[0..100000] of longint;
        n,i,k:longint;
        res:int64;
begin
        readln(n);
        i:=0;
        pow[0]:=1;
        for i:=1 to loop do
        pow[i]:=(pow[i-1]*3) mod base;
        res:=1;
        for i:=1 to trunc(sqrt(n)) do
        begin
                if n mod i = 0 then
                begin
                        res:=(res*(pow[i mod loop]-1)) mod base;
                        k:=n div i;
                        if k<>i then
                        res:=(res*(pow[k mod loop]-1)) mod base;
                end;
        end;
        write(res);
end.

Download