博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
FJUT3565 最大公约数之和(容斥)题解
阅读量:6966 次
发布时间:2019-06-27

本文共 1700 字,大约阅读时间需要 5 分钟。

题意:给n,m,求出图片.png

思路:题意为求出1~m所有数和n的gcd之和。显然gcd为n的因数。我们都知道gcd(a,b)= c,那么gcd(a/c,b/c)= 1。也就是说我们枚举n所有的因数k,然后去找1~m/k中和n/k互质的个数就是gcd为k的个数。这个直接容斥就行。

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define inf 0x3f3f3f3f#define lson l,mid,rt<<1#define rson mid+1,r,rt<<1|1#define mem(a,b) memset(a,b,sizeof(a));#define lowbit(x) x&-x;typedef long long ll;typedef unsigned long long ull;const double eps = 1e-6;const int maxn = 1e5+5;const ll mod = 1e8+7;ll prime[maxn], p[maxn], pn;void init(){ pn = 0; memset(prime, 0, sizeof(prime)); for(ll i = 2; i < maxn; i++){ if(!prime[i]){ p[pn++] = i; for(ll j = i * i; j < maxn; j += i) prime[j] = 1; } }}ll y[maxn], tot;ll solve(ll r, ll n){ //返回1~r和n的gcd为1个数 tot = 0; ll N = n; for(int i = 0; p[i] * p[i] <= N && i < pn; i++){ if(N % p[i] == 0){ y[tot++] = p[i]; while(N % p[i] == 0) N /= p[i]; } } if(N > 1) y[tot++] = N; ll num = 0; for(ll i = 1; i < (1 << tot); i++){ ll val = 1, times = 0; for(ll j = 0; j < tot; j++){ if((1 << j) & i){ times++; val *= y[j]; } } if(times & 1){ num += r / val; } else{ num -= r / val; } } return r - num;}int main(){ ll n, m, num, ans = 0, cnt = 0, temp; init(); scanf("%lld%lld", &n, &m); for(ll i = 2; i <= sqrt(n); i++){ if(n % i == 0){ num = solve(m / i, n / i); ans += num * i; cnt += num; if(i * i != n){ temp = n / i; num = solve(m / temp, n / temp); ans += num * temp; cnt += num; } } } num = solve(m / n, 1); ans += num * n; cnt += num; ans += m - cnt; printf("%lld\n", ans); return 0;}

 

转载于:https://www.cnblogs.com/KirinSB/p/9888543.html

你可能感兴趣的文章
Oracle之不可见索引
查看>>
iOS - Contacts 通讯录
查看>>
《C++ Primer Plus》16.1 string类 学习笔记
查看>>
NPOI之使用EXCEL模板创建报表
查看>>
晕,hibernate 的 merge和cascade="all-delete-orphan"要慎重合在一起使用
查看>>
成立23周年,大数据助力迪信通开启4.0时代征程
查看>>
酷!新款 iPad 可能将会取消 Home 键
查看>>
收快递成“新开门七件事” 京东小哥最暖心
查看>>
AMD又有大动作!2018CES期间牵手京东强势吸睛
查看>>
2017百度AI开发者大会 一场5000名开发者的分享盛宴
查看>>
野心外漏?Windows Defender或将独霸杀毒软件市场?
查看>>
重庆“90后”双胞胎“动妹” 守护春运回家路
查看>>
电影《蓝色生死恋》将上映 保留原版经典片段
查看>>
“中华龙乡”重庆铜梁举办首届中华龙灯艺术节
查看>>
探访广铁深圳“父女搭档”乘警出勤风采
查看>>
6月Python热文Top10,精选自1000篇文章
查看>>
Vue 折腾记 - (12) Nuxt.js写一个校验访问浏览器设备类型及环境的中间件
查看>>
使用 React 全家桶搭建一个后台管理系统
查看>>
腾讯云容器团队内部Istio专题分享
查看>>
当我说要做大数据工程师时他们都笑我,直到三个月后……
查看>>