前置知识
【偷懒版】最大公约数:
__gcd(a,b)
【递归版, 欧几里得算法 O(log(a+b))】
int gcd(int a, int b){ return b? gcd(b,a%b) : a; }
蓝书推荐,当要做高精度运算时,可以考虑更相减损术
【更相减损术】
a > b , g c d ( a , b ) = g c d ( b , a − b ) = g c d ( a , a − b ) a>b,gcd(a,b)=gcd(b,a-b)=gcd(a,a-b) a>b,gcd(a,b)=gcd(b,a−b)=gcd(a,a−b)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int ans;
int main()
{
// 请在此输入您的代码
for(int i = 1; i <= 2020; i++){
for(int j = 1; j<= 2020; j++){//因i和j都从1开始遍历,所有包含了7/1,和1/7的情况,1/1只在最开始存在,且只有一种。
if(__gcd(i,j)==1){//__gcd(a,b) 内置求a,b两个数的最大公约数的函数
ans++;
}
}
}
cout << ans << endl;
return 0;
}