编程题

(最大公约数之和)下列程序想要求解整数n的所有约数两两之间最大公约 数的和对10007求余后的值,试补全程序。(第一空 2 分,其余 3 分)

举例来说,4的所有约数是1,2,4 。1和2的最大公约数为1;2和4的最大公约 数为2;1和4的最大公约数为1。于是答案为1 2 1=4。

要求 getDivisor 函数的复杂度为o(√n),gcd 函数的复杂度为为o(log max(a, b))。


#include

using namespace std;

const int N = 110000, P = 10007;

int n;

int a[N], len;

int ans;

void getDivisor() {

\tlen = 0;

\tfor (int i = 1; (1) <= n; i)

\t\tif (n % i == 0) {

\t\t\ta[ len] = i;

\t\t\tif ( (2) != i) a[ len] = n / i;

\t\t}

}

int gcd(int a, int b) {

\tif (b == 0) {

(3) ;

\t}

\treturn gcd(b, (4) );

}

int main() {

\tcin >> n;

\tgetDivisor();

\tans = 0;

\tfor (int i = 1; i <= len; i) {

\t\tfor (int j = i 1; j <= len; j) {

\t\t\tans = ( (5) ) % P;

\t\t}

\t}

\tcout << ans << endl;

\treturn 0;

}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论