Codeforces Round 911 (Div. 2) --- D题题解

D. Small GCD

 

Problem - D - Codeforces

题目大意:

给你一个数组,你可以在里面任选三个数ai aj ak,要求i j k 互不相同, 现定义一个函数f(a,b,c)=gcd(a,b),其中a 和 b为a,b,c中较小的两个。求f(a,b,c)的累加和。更通常的说就是求

思路解析:

因为他是求任意三个数的函数值的累加和,所以我们ai aj ak的位置并不影响答案,那我们可以直接将整个数组排序,因为对于 ai aj定了之后 ak可以是任意的(ak > ai, ak > aj),即k能选取的范围就是gcd(ai, aj)的次数。如果排序后 确定ai aj 后我们直接使gcd(ai, aj) * (n-j).

但是我们暴力枚举 ai 和 aj 的话,时间复杂度大概为 O(5*10^9),这个会被卡住,所以我们需要想到一个好的方法,又因为100000它的因子最多为128个,我们可以直接预处理,得到【1,100000】的每个数的所有因子,这样我们就把它的公因数控制住了,当公因数为t时,能贡献多少答案,但是公因数为t,它的最大公因数可能为t的倍数,所以这里需要使用容斥原理来做。

答案怎么统计?

for (int i = 0; i < n; i++) {
                for (int j = 0; j < 128; j++) {
                    if (num[arr[i]][j] == 0) break;
                    // (n - i - 1) k 可以枚举多少个
                    // num[arr[i]][j] 公因数
                    // nums[num[arr[i]][j]] 公因数的个数
                    f[num[arr[i]][j]] += (long) nums[num[arr[i]][j]] * (n - i - 1);
                    nums[num[arr[i]][j]]++;
                }
            }

之前的个数因数为t的数有nums[num[arr[i]][j]]个,所以对于当前这个b来说他的a有nums[num[arr[i]][j]]个选择,然后乘以c能选择的个数。

代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StreamTokenizer;
import java.util.Arrays;

/**
 * @ProjectName: study3
 * @FileName: Ex31
 * @author:HWJ
 * @Data: 2023/11/27 9:29
 */
public class Ex31 {
    static int[][] num = new int[100005][128];

    public static void main(String[] args) throws IOException {

        for (int i = 1; i <= 100000; i++) {
            int k = 0;
            for (int j = 1; j <= Math.sqrt(i); j++) {
                if (i % j == 0) {
                    num[i][k++] = j;
                    if (j != i / j) {
                        num[i][k++] = i / j;
                    }
                }
            }
        }
        StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
        in.nextToken();
        int t = (int) in.nval;
        for (int o = 0; o < t; o++) {
            in.nextToken();
            int n = (int) in.nval;
            int[] arr = new int[n];
            int[] nums = new int[100005];
            long[] f = new long[100005];
            for (int i = 0; i < n; i++) {
                in.nextToken();
                arr[i] = (int) in.nval;
            }
            Arrays.sort(arr);
            long ans = 0;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < 128; j++) {
                    if (num[arr[i]][j] == 0) break;
                    // (n - i - 1) k 可以枚举多少个
                    // num[arr[i]][j] 公因数
                    // nums[num[arr[i]][j]] 公因数的个数
                    f[num[arr[i]][j]] += (long) nums[num[arr[i]][j]] * (n - i - 1);
                    nums[num[arr[i]][j]]++;
                }
            }
            for (int i = 100000; i >= 1; i--) {
                for (int j = i + i; j <= 100000; j+=i) {
                    f[i] -= f[j]; // 容斥处理
                }
            }
            for (int i = 100000; i >= 1; i--){
                ans += f[i] * i;
            }
            System.out.println(ans);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/192423.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Callable、Future和FutrueTask详解

一、Callable介绍 1.1 Runnable介绍 Runnable是一个接口&#xff0c;里面声明了run方法。但是由于run方法返回值类型为void&#xff0c;所以在执行完成任务后&#xff0c;无法返回任何结果。 FunctionalInterface public interface Runnable {public abstract void run(); }…

SIFT尺度不变特征变换

SIFT(Scale-Invariant Feature Transform)是一种用于图像处理和计算机视觉中的特征提取和匹配的算法。它的主要优点是对图像的尺度、旋转和亮度变化具有较强的鲁棒性。 基本原理: Scale-space peak selection: Potential location for finding features.Keypoint Localizat…

Redis 命令处理过程

我们知道 Redis 是一个基于内存的高性能键值数据库, 它支持多种数据结构, 提供了丰富的命令, 可以用来实现缓存、消息队列、分布式锁等功能。 而在享受 Redis 带来的种种好处时, 是否曾好奇过 Redis 是如何处理我们发往它的命令的呢&#xff1f; 本文将以伪代码的形式简单分析…

【活动回顾】ABeam 德硕| 艾宾信息技术开发(西安)西北高校行——与西北三所高校签订校企合作协议

前言 INTRODUCTION 10月下旬&#xff0c;ABeam旗下艾宾信息技术开发&#xff08;西安&#xff09;校招团队来到宁夏大学、青海大学、兰州大学这三所高校&#xff0c;就校企合作达成多项共识并举行了隆重的签约仪式。ABeam大中华区董事长兼总经理中野洋辅先生也特意留出时间莅临…

【活动回顾】sCrypt在2023伦敦区块链大会上的精彩表现

2023伦敦区块链大会&#xff0c;是本年度最盛大的比特币及区块链行业活动。大会于2023年5月31日至6月2日&#xff0c;在伦敦女王伊丽莎白二世中心举行&#xff0c;旨在展示BSV区块链的真正潜力。 sCrypt Inc 的创始人兼 CEO 刘晓晖&#xff0c; 作为演讲嘉宾出席了会议。他向大…

FreeImage 编译安装

FreeImage下载&#xff1a; The FreeImage Project 点击第6行&#xff1a; Download FreeImage 3.18.0 或&#xff1a; wget http://downloads.sourceforge.net/freeimage/FreeImage3170.zip #解压 unzip FreeImage3170.zip -d freeImage 编译FreeImage源代码可能需要遵循…

抓包工具安装

charles的安装 参考链接:[Python3网络爬虫开发实战] 1.7.1-Charles的安装 | 静觅 说明: 1.电脑端+手机端 都需要安装证书,安装证书是为了能抓取https协议的接口 2.手机端设置wifi的网络代理 + 电脑端设置代理端口,即可实现抓包。 特定流量抓包 HttpCanary(安装在手机里…

echarts散点图(象限图)设置不同的颜色

如图所示&#xff1a; <template><div ref"sdtcmijy" :style"{height:scrollerHeight}"></div> </template> <script> import {getXxt} from ./../requestAPI.jsexport default {data(){return {params:{},seriesData:[],…

Vue快速实践总结 · 上篇

文章目录 模板语法数据绑定事件处理计算属性监视属性&#xff08;监听器&#xff09;条件渲染列表渲染数据监视原理内置指令总结生命周期组件化编程组件使用步骤组件的嵌套this指向单文件组件ref、props 脚手架(Vue CLI)render函数 参考自己的Vue专栏以及Vue官方文档 模板语法 …

10 个例子带你学会 AI 编程(含提示词)

大家好&#xff0c;我是伍六七。 AI 编程是一个程序员群体普遍关注的领域&#xff0c;但是真的使用 AI 编程实现提效的还是少数。 有的人没有大模型资源&#xff0c;有的人不知道可以在哪些方面使用 AI 进行提效&#xff0c;还有的人不相信使用 AI 可以提效。 今天&#xff…

用java实现王者荣耀

第一步是创建项目 项目名自拟 第二部创建个包名 来规范class 然后是创建类 GameFrame 运行类 package com.sxt; import java.awt.Graphics; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; impo…

【开源】基于Vue和SpringBoot的数字化社区网格管理系统

项目编号&#xff1a; S 042 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S042&#xff0c;文末获取源码。} 项目编号&#xff1a;S042&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、开发背景四、系统展示五、核心源码5…

数据结构—树

文章目录 9.树(1).树的基本概念#1.基本定义#2.树的广义表表示法#3.基本术语 (2).树的存储结构#1.标准形式(常用)#2.逆存储形式#3.孩子兄弟存储法 (3).并查集#1.我们到底想解决什么问题#2.并查集结点#2.Find(查)#3.Union(并)#4.例子 (4).树的遍历#1.前序遍历#2.后序遍历#3.遍历的…

PHPExcel 导出Excel报错:PHPExcel_IOFactory::load()

背景 近期在做 excel文件数据导出时&#xff0c;遇到如下报错&#xff1a; iconv(): Detected an illegal character in input string场景&#xff1a;计划任务后台&#xff0c;分步导出 大数据 excel文件发现在加载文件时&#xff0c;会有报错 报错信息 如下&#xff1a; {&q…

锂电池污水如何处理

锂电池是目前应用广泛的重要电池类型&#xff0c;然而其生产过程和废弃处理中产生的污水对环境造成了不可忽视的影响。本文将探讨锂电池污水的处理方法&#xff0c;以期为环境保护和可持续发展作出贡献。 首先&#xff0c;了解锂电池污水的组成是解决问题的关键。锂电池污水通…

物理层之奈氏准则和香农定理

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

DevEco Studio对同一套HarmonyOS代码进行多设备端预览

鸿蒙代码有一个很大的优势 不需要其他的语法 只需要一套HarmonyOS代码 就可以在 手机 平板 电脑上运行 我们可以在DevEco Studio预览器上 点击如下图指向位置 弹出的这个窗口中 我们将右上角的开关勾选上 这样 我们调试器向下滚动 就可以看到多端预览的一个效果了

Glare or Gloom, I Can Still See You – End-to-End Multi-Modal Object Detection

SENSOR-AWARE MULTI-MODAL FUSION G-log(-log(U))&#xff0c;U&#xff5e;Uniform[0,1] 辅助信息 作者未提供代码

编译器设计03-后端概述

后端处理概述 后端处理&#xff1a;中间代码生成&#xff0c;目标代码生成&#xff0c;贯穿各个阶段的优化。 后端处理犹如得出中文文章&#xff0c;当阅读完英语文章后&#xff0c;你的脑海中就有清晰的“中间代码”了&#xff0c;想写作的时候就心中有数&#xff0c;核心论…

基于PLC的物料分拣控制传送带控制系统设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;物料分拣 获取完整论文报告PLC梯形图工程源文件 传送带在先进制造领域中扮演着极其重要的角色。它可以搬运货物、分拣物品、代替人的繁重劳动。可以实现生产的机械化和自动化&#xff0c;能在有害环境下操作以保护人身安全…