2020.03.11

//经过重重笔试面试的考验,小明成功进入 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");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值