当前位置: 首页 > news >正文

CodeForces 1717E【线性筛】

题意:给定 n n n,求所有三元组 ( a , b , c ) (a,b,c) (a,b,c) 满足 a + b + c = n a+b+c=n a+b+c=n lcm ⁡ ( gcd ⁡ ( a , b ) , c ) \operatorname{lcm}(\gcd(a,b),c) lcm(gcd(a,b),c) 的和。

思想:

第一层循环枚举 gcd ⁡ ( a , b ) \gcd(a,b) gcd(a,b) 的值。

然后枚举 a + b a+b a+b 的值。

容易发现, a + b a + b a+b 的值一定是 k × gcd ⁡ ( a , b ) k\times \gcd (a,b) k×gcd(a,b) k ∈ N ∗ k\in N^* kN

也就是说, ( a , b ) (a,b) (a,b) 的取值方法一共有 φ ( ⌊ n − c gcd ⁡ ( a , b ) ⌋ ) \varphi(\lfloor\frac{n-c}{\gcd(a,b)}\rfloor) φ(⌊gcd(a,b)nc⌋) 种,所以考虑进行类似于埃式筛法的算法,每一次更新的时候将答案加上 lcm ⁡ ( gcd ⁡ ( a , b ) , c ) × φ ( ⌊ n − c gcd ⁡ ( a , b ) ⌋ ) \operatorname{lcm}(\gcd(a,b),c)\times \varphi(\lfloor\frac{n-c} {\gcd(a,b)}\rfloor) lcm(gcd(a,b),c)×φ(⌊gcd(a,b)nc⌋) 即可。

// 这回只花了45min就打完了。
// 真好。记得多手造几组。最好有暴力对拍。

#include <bits/stdc++.h>

#define int long long

using namespace std;

const int N = 2e5 + 10, mod = 1e9 + 7;
int phi[N]; // debug 这个地方要开 long long
bool not_prime[N];
int cnt, primes[N], n, ans = 0;

void sieve()
{
  phi[1] = 1;
  for (int i = 2; i < N; i ++)
  {
    if (!not_prime[i])
    {
      primes[++ cnt] = i;
      phi[i] = i - 1;
    }
    for (int j = 1; i * primes[j] < N; j ++)
    {
      not_prime[i * primes[j]] = true; // debug i*primes[j] --> j*primes[j]
      if (i % primes[j])
        phi[i * primes[j]] = phi[i] * (primes[j] - 1);
      else
      {
        phi[i * primes[j]] = phi[i] * primes[j];
        break;
      }
    }
  }
}

signed main()
{
  cin >> n;
  sieve();
  for (int i = 1; i < n; i ++)
    for (int j = 2 * i; j < n; j += i) // debug =n 的话没有法子选了
      (ans += phi[j / i] * lcm(i, n - j) % mod) %= mod;
  cout << ans << '\n';
  return 0;
}

// 足下千里,移步换景,寰宇纷呈万花筒

凑字数凑字数凑字数凑字数
凑字数凑字数凑字数凑字数
凑字数凑字数凑字数凑字数
凑字数凑字数凑字数凑字数
凑字数凑字数凑字数凑字数
凑字数凑字数凑字数凑字数
凑字数凑字数凑字数凑字数
凑字数凑字数凑字数凑字数
凑字数凑字数凑字数凑字数
凑字数凑字数凑字数凑字数

相关文章:

  • Java程序猿搬砖笔记(九)
  • ROS1云课→16机器人模型从urdf到xacro
  • 花好月圆│以代码寄相思,绘嫦娥之奔月
  • WiFi基础学习到实战(一)
  • Java 在Word文档中添加艺术字
  • 打印机打印数量和碳粉监视器 2.2--PrintLimit Print Tracking
  • 懒惰型性格分析,如何改变懒惰型性格?
  • 为什么工作不能让人满意?
  • 【WSN定位】基于chan、taylor算法实现移动基站无源定位附matlab代码
  • Object.freeze()详解——只支持浅冻结-冻结对象的直接属性,不支持深冻结-对象的对象不支持冻结 vue中定义常量文件和导入常量文件
  • 一文入魂:再也不用担心我不懂C++移动语义了!
  • js中,函数的两种命名方式-声明式、函数表达式 自执行匿名函数 (function(){})()之删除对象中的属性
  • 数据建模之查文献找数据以及数据预处理
  • 数字藏品有何价值
  • redis集群节点间的内部通信机制
  • [译] React v16.8: 含有Hooks的版本
  • 「面试题」如何实现一个圣杯布局?
  • Docker容器管理
  • leetcode46 Permutation 排列组合
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • NSTimer学习笔记
  • PHP变量
  • Redis在Web项目中的应用与实践
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 当SetTimeout遇到了字符串
  • 那些年我们用过的显示性能指标
  • 前端学习笔记之观察者模式
  • 设计模式(12)迭代器模式(讲解+应用)
  • 实习面试笔记
  • - 转 Ext2.0 form使用实例
  • puppet连载22:define用法
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • #每天一道面试题# 什么是MySQL的回表查询
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (a /b)*c的值
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (solr系列:一)使用tomcat部署solr服务
  • (第9篇)大数据的的超级应用——数据挖掘-推荐系统
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • .NET Core中Emit的使用
  • .Net 垃圾回收机制原理(二)
  • .NET 中各种混淆(Obfuscation)的含义、原理、实际效果和不同级别的差异(使用 SmartAssembly)
  • .net分布式压力测试工具(Beetle.DT)
  • .net项目IIS、VS 附加进程调试
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • :如何用SQL脚本保存存储过程返回的结果集
  • ;号自动换行
  • @EventListener注解使用说明