(最大公约数之和)下列程序想要求解整数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;
}
发表评论 取消回复