//经过重重笔试面试的考验,小明成功进入 Macrohard 公司工作。
//今天小明的任务是填满这么一张表:
//表有 n 行 n 列,行和列的编号都从1算起。
//其中第 i 行第 j 个元素的值是 gcd(i, j)的平方,
//gcd 表示最大公约数,以下是这个表的前四行的前四列:
//1 1 1 1
//1 4 1 4
//1 1 9 1
//1 4 1 16
//小明突然冒出一个奇怪的想法,他想知道这张表中所有元素的和。
//由于表过于庞大,他希望借助计算机的力量。
//=========================================================================================================
//「输入格式」
//一行一个正整数 n 意义见题。
//「输出格式」
//一行一个数,表示所有元素的和。由于答案比较大,请输出模(10 ^ 9 + 7)(即:十亿零七) 后的结果。
//=========================================================================================================
//「样例输入」
//4
//「样例输出」
//48
//=========================================================================================================
//「数据范围」
//对于 30 % 的数据,n <= 1000
//存在 10 % 的数据,n = 10 ^ 5
//对于 60 % 的数据,n <= 10 ^ 6
//对于 100 % 的数据,n <= 10 ^ 7
//资源约定:
//峰值内存消耗(含虚拟机) < 256M
// CPU消耗 < 2000ms
// 请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
// 注意:
// main函数需要返回0;
//只使用ANSI C / ANSI C++ 标准;
//不要调用依赖于编译环境或操作系统的特殊函数。
//所有依赖的函数必须明确地在源文件中 #include <xxx>
//不能通过工程设置而省略常用头文件。
//提交程序时,注意选择所期望的语言类型和编译器类型。
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
//思路及算法:
//1,建立一个二维数组存放这些数
//2,以此输出,进行取最大公约数计算,并存放
//3.各项加和
int Max(int a,int b) {
int max = 0;
if (a > b) {
max = a;
}
else {
max = b;
}
return max;
}
int fun(int n) {
int Max();
int a[1000][1000];
int i, j, m;
int sum = 0;
for(i=1;i<=n;i++)
for (j = 1; j <= n; j++) {
if (i == 1) {
a[i][j] = 1;
}
else if (j == 1) {
a[i][j] = 1;
}
else {
for(m=Max(i, j);m<= Max(i, j);m--)
if (i%m == 0 && j % m == 0) {
a[i][j] = m;
break;
}
}
sum += a[i][j];
}
return sum;
}
int main(){
int num;
scanf("%d", &num);
int result = fun(num);
printf("%d", result);
system("pasuse");
}
2020.03.11
最新推荐文章于 2020-12-30 01:35:03 发布