← 查看本卷题目
组合题5 个小题
已作答 0 / 5

完善程序

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

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

要求 getDivisor 函数的复杂度为 O(n)O(\sqrt{n}),gcd 函数的复杂度为O(log⁡max⁡(a,b))O(\log \max(a,b))。

#include <iostream>using namespace std; const int N = 110000, P = 10007;int n;int a[N], len;int ans; void getDivisor() {    len = 0;    for (int i = 1; ① <= n; ++i)        if (n % i == 0) {          a[++len] = i;          if ( ② != i) a[++len] = n / i;        }} int gcd(int a, int b) {    if (b == 0) {    	③ ;    }    return gcd(b, ④ );} int main() {    cin >> n;    getDivisor();    ans = 0;    for (int i = 1; i <= len; ++i) {        for (int j = i + 1; j <= len; ++j) {        	ans = ( ⑤ ) % P;        }    }    cout << ans << endl;    return 0;}
第 25 题填空题

①处应填( )

填写答案