有两种做法 一种是gcd与lcm相乘后就是两个数的乘积,枚举第一个数,算出第二数,看最大公约数是不是题目给的. 第二种就lcm/gcd的答案为两个互质的数相乘.然后就枚举有多少组互质的数相乘等于lcm / gcd就ok了 然后又小优化,可以只枚举到根号,然后结果乘以2就行了. #include<cstdio> #define _for(i, a, b) for(int i = (a); i <= (b); i++) using namespace std; int gcd(int a,…
P1029最大公约数和最小公倍数 #include <iostream> #include <cmath> #include <algorithm> #define int long long using namespace std; int x,y; int cnt; int t; signed main() { cin >> x >> y; t = x * y; //最大公约数和最小公倍数的乘积就是原两个数的积 for(int i = x;i…
题目链接 做过\(n\)遍这种题了... 答案就是\(\sum_{i=1}^{n}\sum_{j=1}^{n/i}[\varphi(j)*i]\) 线筛欧拉函数求前缀和直接算就行. #include <cstdio> const int MAXN = 2000010; int v[MAXN], prime[MAXN], cnt, n; long long ans, phi[MAXN]; int main(){ scanf("%d", &n); phi[1] = 1;…
P1029 最大公约数和最小公倍数问题 最大公约数用辗转相除法: 最小公倍数:两个数的乘积=他们的最大公约数*最小公倍数,既然两个数的乘积及其最大公约数已知,那么最小公倍数也可以求了. #include<bits/stdc++.h> using namespace std; int x,y,sum; int gcd(int a,int b) { if(!b)return a; return gcd(b,a%b); } int main() { scanf("%d%d",&a…
洛谷题目链接:[CQOI2007]余数求和 题目背景 数学题,无背景 题目描述 给出正整数n和k,计算G(n, k)=k mod 1 + k mod 2 + k mod 3 + - + k mod n的值,其中k mod i表示k除以i的余数.例如G(10, 5)=5 mod 1 + 5 mod 2 + 5 mod 3 + 5 mod 4 + 5 mod 5 -- + 5 mod 10=0+1+2+1+0+5+5+5+5+5=29 输入输出格式 输入格式: 两个整数n k 输出格式: 答案 输入…
洛谷P2398 GCD SUM 题目描述 for i=1 to n for j=1 to n sum+=gcd(i,j) 给出n求sum. gcd(x,y)表示x,y的最大公约数. 输入输出格式 输入格式: n 输出格式: sum 输入输出样例 输入样例#1: 2 输出样例#1: 5 说明 数据范围 30% n<=3000 60% 7000<=n<=7100 100% n<=100000 Solution 这道题的做法貌似很多...如果你同时会狄利克雷卷积和莫比乌斯反演的话也可以强…