#10194. 「一本通 6.1 练习 1」A 的 B 次方

本文详细介绍了一种高效计算大数幂次方取模运算的方法——快速幂算法。通过实例演示了如何使用C++实现该算法,以解决给定三个整数a、b、m时求a^b mod m的问题。适用于竞赛编程和大数运算场景。

题目描述

给出三个整数 a,b,ma,b,ma,b,m,求 ab mod ma^b\bmod mabmodm 的值。

输入格式

一行三个整数 a,b,ma,b,ma,b,m。

输出格式

一个整数,表示 ab mod ma^b\bmod mabmodm 的值。

样例

样例输入

2 100 1007

样例输出

169

数据范围与提示

对于全部数据,1≤a,b,m≤1091\le a,b,m\le 10^91≤a,b,m≤109。

 

#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
typedef long long LL;
LL binary(LL a, LL b, LL m)
{
	LL ans = 1;
	a = a % m;//这个防止出错
	while (b > 0) {
		if (b & 1) {
			ans = ans * a%m;
		}
		a = a * a%m;
		b >>= 1;
	}
	return ans;
}
int main()
{
	LL a, b, m;
	scanf("%lld %lld %lld", &a, &b, &m);
	printf("%lld\n", binary(a, b, m));
	return 0;
}

 

generator_huawei_sw.yml auths: public_v2: # 认证模块名称 version: 2 # snmp v2c版本 community: xiwang.com # snmp 团体名 modules: huawei_common: # 华为公共指标模块名称 walk: # 交换机基础信息 温度信息 风扇信息 电源信息 - 1.3.6.1.2.1.1.1 # sysDescr 系统的文字描述 - 1.3.6.1.2.1.1.5 # sysName 交换机名称 - 1.3.6.1.4.1.2011.5.25.31.1.1.6.1.1 # hwEntPowerUsedInfoBoardName 板卡实体名称 - 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.10 # hwEntityUpTime 板卡实体启动时间 单位秒 - 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.11 # hwEntityTemperature 实体温度 单位°C - 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.12 # hwEntityTemperatureThreshold 实体温度高门限 单位°C - 1.3.6.1.4.1.2011.5.25.31.1.1.10.1.7 # hwEntityFanState 风扇状态 - 1.3.6.1.4.1.2011.5.25.31.1.1.10.1.6 # hwEntityFanPresent 风扇的在位状态 - 1.3.6.1.4.1.2011.5.25.31.1.1.10.1.5 # hwEntityFanSpeed 风扇的转速 #- 1.3.6.1.4.1.2011.5.25.31.1.1.18.1.1 # hwEntityPwrSlot 电源的槽位号 - 1.3.6.1.4.1.2011.5.25.31.1.1.18.1.6 # hwEntityPwrState 电源的状态 - 1.3.6.1.4.1.2011.6.157.1.6 # hwCurrentPower 当前功率mW - 1.3.6.1.4.1.2011.6.157.1.3 # hwAveragePower 平均功率mW # 交换机CPU和内存信息 - 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5 # hwEntityCpuUsage 实体CPU使用率 - 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.7 # hwEntityMemUsage 实体内存使用率 - 1.3.6.1.4.1.2011.6.9.1.4.2.1.3 # hwStorageSpace Flash设备空间的大小 单位是千字节 - 1.3.6.1.4.1.2011.6.9.1.4.2.1.4 # hwStorageSpaceFree Flash设备剩余空间 单位是千字节 - 1.3.6.1.4.1.2011.6.9.1.4.2.1.5 # hwStorageName Flash设备名称 #- 1.3.6.1.4.1.2011.6.3.4.1.2 # hwCpuDevDuty 5秒钟内的CPU的平均使用率 #- 1.3.6.1.4.1.2011.6.3.4.1.3 # hwCpuDuty1min 1分钟内的CPU的平均使用率 #- 1.3.6.1.4.1.2011.6.3.4.1.4 # hwCpuDuty5min 5分钟内的CPU的平均使用率 #- 1.3.6.1.4.1.2011.6.3.5.1.1.2 # hwMemoryDevSize 每块板上内存总量 #- 1.3.6.1.4.1.2011.6.3.5.1.1.3 # hwMemoryDevFree 每块板上空闲的内存总量 #- 1.3.6.1.4.1.2011.6.3.5.1.1.4 # hwMemoryDevRawSliceUsed 每块板上已占用的raw slice内存总量 max_repetitions: 50 retries: 3 timeout: 5s lookups: - source_indexes: [hwEntityFanSlot, hwEntityFanSn] lookup: hwEntityFanPresent - source_indexes: [hwEntityFanSlot, hwEntityFanSn] lookup: hwEntityFanState - source_indexes: [entPhysicalIndex] lookup: 1.3.6.1.4.1.2011.5.25.31.1.1.6.1.1 #drop_source_indexes: true - source_indexes: [hwStorageIndex] lookup: hwStorageName overrides: hwEntityFanPresent: ignore: true hwEntityFanState: ignore: true hwEntPowerUsedInfoBoardName: ignore: true type: DisplayString hwStorageName: ignore: true type: DisplayString 没有mib 这个文件如何转换生成snmp.yml配置
最新发布
05-15
<think>好的,我现在需要帮助用户解决如何在没有MIB文件的情况下,根据已有的generator_huawei_sw.yml文件生成snmp.yml配置文件的问题。用户之前已经询问过类似的问题,但这次他们提到了一个具体的华为交换机配置文件,并且引用了之前的一些配置示例。我需要结合之前的回答和新的引用信息来提供解决方案。 首先,回顾用户之前的对话。用户之前的问题是关于在没有MIB文件的情况下生成snmp.yml,我给出的步骤包括手动定义OID,修改generator.yml,运行生成命令,验证配置,部署和测试。现在用户提到有一个具体的generator_huawei_sw.yml文件需要转换,并且引用了两个引用内容。 引用1提到在networkdevice-monitor-master项目的某个目录下有network-switch.yml文件,需要编辑并添加交换机IP,然后上传到Prometheus的同目录。引用2是关于Prometheus的job配置,包括targets、module参数和relabel配置,以及Grafana的面板ID。用户现在想将generator_huawei_sw.yml转换为snmp.yml,没有MIB文件。 首先需要确定generator_huawei_sw.yml的结构是否和之前提到的generator.yml类似。假设这个文件已经包含华为交换机的OID定义,用户需要将其转换为snmp_exporter可用的snmp.yml。由于没有MIB文件,可能需要手动确认OID是否正确,或者依赖已有的配置。 根据之前的回答,生成snmp.yml的关键步骤是配置generator.yml,然后运行生成命令。现在用户有一个特定的华为配置文件,可能需要将该文件作为generator.yml使用,或者整合到其中。根据引用1,用户可能需要调整这个华为配置文件,添加目标IP,并上传到正确的位置。然后运行生成命令,生成snmp.yml。 需要注意的是,snmp-generator工具常需要MIB文件来生成配置,但在没有MIB的情况下,必须手动定义OID。因此,检查generator_huawei_sw.yml是否已经包含必要的OID定义,或者是否需要用户手动添加。例如,在之前的回答中,用户手动在generator.yml中添加了sysUpTime和cpuLoad的OID。现在针对华为交换机,可能需要定义不同的OID,比如接口状态、流量计数器等。 接下来,用户可能需要将华为的配置文件(如generator_huawei_sw.yml)整合到generator.yml的模块中。例如,在generator.yml中定义华为交换机的模块,指定walk的OID和metrics。然后运行生成命令,将生成对应的snmp.yml。根据引用2,用户还需要在Prometheus配置中添加job,指定targets和module参数为HUAWEI,并正确设置relabel配置。 此外,用户可能需要验证生成的snmp.yml是否正确,使用snmpwalk或snmp_exporter的调试模式检查数据是否正常。最后,部署到Docker容器中,并配置Prometheus和Grafana进行监控和展示。 现在需要将这些步骤整理成清晰的指南,确保用户能够按照步骤操作。同时,需要考虑到用户可能遇到的常见问题,如OID不可达、配置错误等,并提供解决方法。另外,根据用户提供的引用,需要正确引用相关的配置示例和检查命令,比如Prometheus的配置检查和重启服务,以及Grafana的面板ID。 总结步骤: 1. 分析现有的generator_huawei_sw.yml文件,确保包含必要的OID定义。 2. 将该文件整合到generator.yml中,或直接作为生成配置的输入。 3. 运行snmp-generator工具生成snmp.yml。 4. 配置Prometheus的job,引用生成的snmp.yml中的模块。 5. 部署并测试,确保数据正确采集。 6. 配置Grafana使用提供的仪表板ID进行可视化。 需要确保用户理解每个步骤的目的,特别是如何处理没有MIB文件的情况,可能需要手动验证OID的有效性。同时,提醒用户检查网络设备的SNMP访问权限和社区字符串是否正确,避免连接问题。</think>### 分步指南:基于华为配置文件生成snmp.yml(无MIB文件) #### 一、配置文件重组 1. **分析现有配置** 将`generator_huawei_sw.yml`中的监控项转换为标准格式,示例结构: ```yaml modules: HUAWEI_SW: # 模块名称需与Prometheus配置对应[^2] walk: - 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5 # CPU使用率OID(示例) - 1.3.6.1.4.1.2011.5.25.42.3.1.10.1.4 # 内存使用率OID metrics: - name: cpu_usage oid: 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5 type: gauge help: "CPU利用率百分比" - name: mem_usage oid: 1.3.1.4.1.2011.5.25.42.3.1.10.1.4 type: gauge help: "内存使用率" ``` 2. **合并到生成器配置** 将上述内容保存为`generator.yml`,或过`include`引用: ```yaml include: - generator_huawei_sw.yml # 直接包含华为配置文件[^1] ``` #### 二、生成snmp.yml 1. **执行生成命令** ```bash docker run -v "$(pwd):/opt/" prom/snmp-generator generate ``` > 生成器会自动将`generator*.yml`合并输出到`snmp.yml`[^4] 2. **验证输出文件** 检查`snmp.yml`是否包含`HUAWEI_SW`模块: ```yaml HUAWEI_SW: walk: - 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5 - 1.3.6.1.4.1.2011.5.25.42.3.1.10.1.4 metrics: - name: cpu_usage oid: 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5 type: gauge help: CPU利用率百分比 ``` #### 三、Prometheus集成 1. **配置抓取任务** 修改`prometheus.yml`,引用新生成的模块: ```yaml - job_name: &#39;huawei_switch&#39; static_configs: - targets: [&#39;200.200.10.2&#39;] # 华为交换机IP[^2] metrics_path: /snmp params: module: [HUAWEI_SW] # 必须与snmp.yml模块名一致 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: &#39;snmp-exporter-ip:9116&#39; # Exporter地址 ``` 2. **配置检查与重载** ```bash ./promtool check config prometheus.yml # 语法验证[^2] systemctl restart prometheus # 配置生效 ``` #### 四、验证与调试 1. **手动测试抓取** ```bash curl "http://localhost:9116/snmp?target=交换机IP&module=HUAWEI_SW" ``` 2. **OID有效性验证** 使用`snmpget`直接查询关键OID: ```bash snmpget -v 2c -c public 交换机IP 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5 ``` ### 常见问题解决方案 **问题1:生成器报错Unknown OID** - 直接编辑`snmp.yml`手动修正OID格式(需确认实际值) - 添加`ignore_errors: true`跳过无效指标: ```yaml metrics: - name: mem_usage oid: 1.3.6.1.4.1.2011.5.25.42.3.1.10.1.4 type: gauge ignore_errors: true # 跳过解析错误 ``` **问题2:Prometheus无数据** - 检查Exporter日志获取详细错误: ```bash docker logs snmp-exporter --tail 100 ``` ### 可视化配置(Grafana) 1. 导入华为交换机模板: - 仪表盘ID `14634`(专用)或 `15473`(用SNMP)[^2] 2. 检查数据源是否关联Prometheus --- **--相关问题--** 1. 如何为不同型号的华为交换机定制OID列表? 2. SNMP Exporter如何处理带索引的OID(如端口流量统计)? 3. Prometheus relabel_config配置有哪些高级用法?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值