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

【公因数匹配——暴力、(质)因数分解、哈希】

题目

暴力代码,Acwing 8/10,官网AC

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
vector<int> nums[N];
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int n;
    cin >> n;
    
    for(int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        for(int j = 2; j <= x / j; j++)
        {
            if(x % j == 0) nums[j].push_back(i), nums[x / j].push_back(i);
        }
        if(x > 1) nums[x].push_back(i);
    }
    
    int ansi = 1e9, ansj = 1e9;
    for(auto &num : nums)
    {
        for(auto &i : num)
            for(auto &j : num)
            {
                if(i < j && (i < ansi || i == ansi && j < ansj))
                {
                    ansi = i;
                    ansj = j;
                }
            }
    }
    
    cout << ansi << ' ' << ansj;
}

代码

#pragma GCC optimize(3)

#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
unordered_map<int, int> mp;
int ansi = 1e9, ansj = 1e9;
void check(int x, int i) //优化:先记录(所有的结果)再匹配改为边记录(最早的结果)边匹配
{
    if(mp.count(x))
    {
        if(mp[x] < ansi) 
        {
            ansi = mp[x];
            ansj = i;
        }
    }
    else mp[x] = i;
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    int n;
    cin >> n;
    
    for(int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        for(int j = 2; j <= x / j; j++) //优化:普通的因数分解改为质数分解
        {
            if(x % j == 0)
            {
                check(j, i); //if(x / j != j) check(x / j, i);
                while(x % j == 0) x /= j;
            }
        }
        if(x > 1) check(x, i);
    }
    
    cout << ansi << ' ' << ansj;
}


http://www.kler.cn/a/522895.html

相关文章:

  • 1.26学习
  • 【东雪莲病毒|罕见病毒|Traitor Virus】
  • 解读隐私保护工具 Fluidkey:如何畅游链上世界而不暴露地址?
  • 新年祝词(原创)
  • MongoDB常见的运维工具总结介绍
  • 算法随笔_29:最大宽度坡_方法3
  • Github 2025-01-27 开源项目周报 Top15
  • 第 4 章:游戏逻辑与状态管理
  • 【微服务与分布式实践】探索 Sentinel
  • 使用 postman 测试思源笔记接口
  • Excel中LOOKUP函数的使用
  • 重回C语言之老兵重装上阵(十五)C语言错误处理
  • v3s传memory
  • 数论问题73
  • xceed PropertyGrid 如何做成Visual Studio 的属性窗口样子
  • kaggle比赛入门 - House Prices - Advanced Regression Techniques(第三部分)
  • mapstruct入门
  • 【Linux】IPC:匿名管道、命名管道、共享内存
  • 智能课堂点名系统:从零实现一个高效课堂管理工具
  • 基于SpringBoot的高校志愿活动服务平台
  • C语言初阶牛客网刷题—— JZ11 旋转数组的最小数字【难度:简单】
  • WSL2+Ubuntu 部署Linux
  • 【CSS入门学习】Flex布局设置div水平、垂直分布与居中
  • Docker Desktop 解决从开发到部署的高效容器化工作流问题
  • Java基础教程(007):方法的重载与方法的练习
  • Linux(NTP配置)