博客
关于我
2020ICPC 江西省大学生程序设计竞赛A Simple Math Problem 莫比乌斯反演
阅读量:622 次
发布时间:2019-03-14

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

C++预处理脚本优化问题

在本文中,我们将提供一个C++预处理脚本,它用于优化一个数学问题。这一脚本涉及到莫比乌斯函数和筛法,它在处理数论问题时表现出色。

代码解释

1. 包含头文件

#include 
#include

2. 预处理常量

const int N = 2e5 + 10;const int M = 1e6 + 10;const int INF = 0x3f3f3f3f;const double eps = 1e-4;const int MOD = 1e9 + 7;

3. 数据类型定义

typedef long long ll;typedef pair
PII;

4. 全局变量

ll prime[N], mu[N], k;ll F[N], ans[N];int n;bool is_prime[N];

5. 函数定义

a. 计算数字之和函数
ll get_sum(int x) {    ll ans = 0;    while (x) {        ans += x % 10;        x /= 10;    }    return ans;}
b. 初始化函数
void init() {    memset(is_prime, true, sizeof is_prime);    mu[1] = 1;    for (int i = 2; i < N; ++i) {        if (is_prime[i]) {            prime[++k] = i;            mu[i] = -1;            for (int j = 1; j <= k && i * prime[j] < N; ++j) {                is_prime[i * prime[j]] = false;                if (i % prime[j] == 0) {                    break;                } else {                    mu[i * prime[j]] = -mu[i];                }            }        }    }    for (int i = 1; i <= n; ++i) {        F[i] = get_sum(i);    }}
c. 预处理答案函数
void pre_process() {    for (int t = 1; t <= n; ++t) {        ll tmp = 0;        for (int T = t; T <= n; T += t) {            int l = T;            int r = min(n, l + t - 1);            tmp += F[l] * ((n / t) - (l / t) + 1);            ans[l] += tmp * mu[t];            if (r + 1 <= n) {                ans[r + 1] -= tmp * mu[t];            }        }    }    for (int i = 1; i <= n; ++i) {        ans[i] += ans[i-1];    }}

代码主函数

void solve() {    cin >> n;    init();    pre_process();    printf("%lld\n", ans[n]);}

总结

这段代码用于解决一个数论问题,它利用了莫比乌斯函数和筛法预处理了答案。在实际应用中,这种预处理方法可以显著提高程序的效率,使其能够在短时间内处理大量数据。

转载地址:http://uqcoz.baihongyu.com/

你可能感兴趣的文章
EnvironmentNotWritableError: The current user does not have write permissions to the target environm
查看>>
Golang起步篇(Windows、Linux、mac三种系统安装配置go环境以及IDE推荐以及入门语法详细释义)
查看>>
Hyper-V系列:windows11开启系统自带安卓虚拟机并安装apk包
查看>>
Hyper-V系列:微软官方文章
查看>>
idea打war包的两种方式
查看>>
Java系列:【注释模板】IDEA中JAVA类、方法注释模板教程
查看>>
JS系列(仅供参考):【浏览器编程】浏览器F12调试工具面板详解和JavaScript添加断点
查看>>
Kali 更换源(超详细,附国内优质镜像源地址)
查看>>
kali安装docker(亲测有效)
查看>>
Linux系列:Linux目录分析:[/] + [/usr] + [/usr/local] + [/usr/local/app-name]、Linux最全环境配置 + 动态库/静态库配置
查看>>
Linux系列:ubuntu各版本之间的区别以及Ubuntu、kubuntu、xUbuntu、lubuntu等版本区别及界面样式
查看>>
mysql系列:远程连接MySQL错误“plugin caching_sha2_password could not be loaded”的解决办法
查看>>
Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案
查看>>
Nmap渗透测试指南之探索网络
查看>>
Nmap渗透测试指南之防火墙/IDS逃逸、信息搜集
查看>>
Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务、snmp服务
查看>>
PHP系列:PHP 基础编程 2(时间函数、数组---实现登录&注册&修改)
查看>>
PHP系列:使用PHP实现登录注册功能的完整指南
查看>>
Python&aconda系列:cmd/powershell/anaconda prompt提示“系统找不到指定的路径”(亲测有效)
查看>>
Python&aconda系列:conda踩坑记录2.UnsatisfiableError: The following specifications were found to be incompa
查看>>