当前位置:首页 > 技术 > 正文内容

约数及其相关算法

访客 技术 2026年6月13日 2

反素数求解

反素数指约数个数多于所有小于它的正整数的数字。以下算法通过深度优先搜索枚举质因子指数组合,寻找不超过给定值n的最大反素数。

#include <iostream>
#include <vector>
using namespace std;
using ll = long long;

const vector<int> primes = {2,3,5,7,11,13,17,19,23,29};
ll max_value, result, max_factors;

void find_antiprime(int pos, ll factor_count, ll current) {
    if(pos >= primes.size()) return;
    
    if(factor_count > max_factors || 
      (factor_count == max_factors && current < result)) {
        result = current;
        max_factors = factor_count;
    }
    
    for(int exp = 1; exp <= 30; ++exp) {
        if(primes[pos] * current > max_value) break;
        current *= primes[pos];
        find_antiprime(pos + 1, factor_count * (exp + 1), current);
    }
}

int main() {
    cin >> max_value;
    find_antiprime(0, 1, 1);
    cout << result;
    return 0;
}

最大公约数

互质与欧拉函数

欧拉函数φ(n)表示小于n的正整数中与n互质的数的数量。以下实现使用线性筛法高效计算欧拉函数:

void compute_euler(int n) {
    vector<bool> is_prime(n+1, true);
    vector<int> primes;
    vector<int> phi(n+1);

    for(int i = 2; i <= n; ++i) {
        if(is_prime[i]) {
            primes.push_back(i);
            phi[i] = i - 1;
        }
        for(int p : primes) {
            if(i * p > n) break;
            is_prime[i * p] = false;
            
            if(i % p == 0) {
                phi[i * p] = phi[i] * p;
                break;
            } else {
                phi[i * p] = phi[i] * (p - 1);
            }
        }
    }
}

坐标系可见点问题

在第一象限内,若点(x,y)与原点(0,0)的连线上无其他整数点,则该点可见。给定N,求满足0≤x,y≤N的可见点数量(不含原点)。

可见点示意图
#include <iostream>
#include <vector>
using namespace std;

vector<int> euler_values(int n) {
    vector<bool> composite(n+1, false);
    vector<int> primes;
    vector<int> phi(n+1);
    phi[1] = 1;

    for(int i = 2; i <= n; ++i) {
        if(!composite[i]) {
            primes.push_back(i);
            phi[i] = i - 1;
        }
        for(int p : primes) {
            if(i * p > n) break;
            composite[i * p] = true;
            phi[i * p] = (i % p == 0) ? 
                phi[i] * p : phi[i] * (p - 1);
            if(i % p == 0) break;
        }
    }
    return phi;
}

int main() {
    int test_count;
    cin >> test_count;
    
    for(int i = 1; i <= test_count; ++i) {
        int N;
        cin >> N;
        auto phi = euler_values(N);
        
        long total = 0;
        for(int j = 2; j <= N; ++j) {
            total += 2 * phi[j];
        }
        
        cout << i << " " << N << " " << total + 3 << "\n";
    }
    return 0;
}

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。