Raising Modulo Numbers

本文介绍了一种基于快速幂算法的游戏实现,玩家选择两个数进行运算,并求所有玩家结果的总和对特定数取余。文章提供了完整的C++代码实现,展示了如何高效地计算大量玩家的指数运算结果。
Raising Modulo Numbers
Time Limit: 1000MS Memory Limit: 30000K
Total Submissions: 5510 Accepted: 3193

Description

People are different. Some secretly read magazines full of interesting girls' pictures, others create an A-bomb in their cellar, others like using Windows, and some like difficult mathematical games. Latest marketing research shows, that this market segment was so far underestimated and that there is lack of such games. This kind of game was thus included into the KOKODáKH. The rules follow: 

Each player chooses two numbers Ai and Bi and writes them on a slip of paper. Others cannot see the numbers. In a given moment all players show their numbers to the others. The goal is to determine the sum of all expressions AiBi from all players including oneself and determine the remainder after division by a given number M. The winner is the one who first determines the correct result. According to the players' experience it is possible to increase the difficulty by choosing higher numbers. 

You should write a program that calculates the result and is able to find out who won the game. 

Input

The input consists of Z assignments. The number of them is given by the single positive integer Z appearing on the first line of input. Then the assignements follow. Each assignement begins with line containing an integer M (1 <= M <= 45000). The sum will be divided by this number. Next line contains number of players H (1 <= H <= 45000). Next exactly H lines follow. On each line, there are exactly two numbers Ai and Bi separated by space. Both numbers cannot be equal zero at the same time.

 

Output

For each assingnement there is the only one line of output. On this line, there is a number, the result of expression 

(A1B1+A2B2+ ... +AHBH)mod M.

 

Sample Input

3
16
4
2 3
3 4
4 5
5 6
36123
1
2374859 3029382
17
1
3 18132

Sample Output

2
13195
13


题解:求n组的a的b次方之和对m取余的值,根据同余定理  (a+b)%m=(a%m+b%m)%m   可知就是求n组的a的b次方对m取余的值之和对m取余。   对于a的b次方对m取余的值可以用快速幂模板求出。

代码:

#include<cstdio>
#include<cmath>
long long pow(int x,int y,int m)
{
	long long ans=1,base=x;
	while(y>0)
	{
		if(y&1)
		  ans=(ans*base)%m;
		base=(base*base)%m;
		y>>=1;
	}
	return ans;
}
int main()
{
	int t;
	int n,m;
	int a,b;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d%d",&m,&n);
		long long sum=0;
		for(int i=0;i<n;i++)
		{
			scanf("%d%d",&a,&b);
			long long cnt=pow(a,b,m);
			sum=(sum+cnt)%m;
		}
		printf("%lld\n",sum);
	}
}


 

在电源管理电路中,UVLO(欠压锁定,Undervoltage Lockout)的行为在电压上升和下降过程中通常具有不对称性,这种特性被称为“迟滞”(Hysteresis)。该特性确保了电路在输入电压波动时不会频繁进入欠压保护状态或退出该状态,从而提高系统的稳定性。 在电压上升过程中,当输入电压达到UVLO的**上升阈值**(V_UVLO_rising)时,系统才会认为电压已恢复至可正常工作的水平,并允许电源管理电路向负载供电[^2]。此阈值通常略高于欠压保护的触发点,以防止在电压接近临界值时出现振荡。 而在电压下降过程中,当输入电压低于**下降阈值**(V_UVLO_falling)时,UVLO机制将触发,切断电源输出以保护电路[^3]。这个下降阈值通常设定为略低于正常工作电压的某个安全值,以确保系统不会因短暂的电压波动而关闭。 这种迟滞行为可通过内部电路设计实现,例如使用带有迟滞特性的比较器来检测输入电压是否在安全范围内。某些电源管理IC还允许通过外部电阻分压器调节UVLO阈值,以便根据具体应用需求进行优化。 例如,在一个典型的电源管理IC中,UVLO的迟滞行为可能表现为以下参数: - UVLO下降阈值(V_UVLO_falling):2.9V - UVLO上升阈值(V_UVLO_rising):3.0V 这种设计使得系统在电压下降时更敏感,在电压回升时更稳定,从而避免在临界电压附近频繁切换工作状态[^3]。 ```c // 示例:模拟UVLO迟滞行为的伪代码 float voltage = read_input_voltage(); float uvlo_falling_threshold = 2.9; // 下降阈值 float uvlo_rising_threshold = 3.0; // 上升阈值 static bool power_enabled = false; if (!power_enabled && voltage >= uvlo_rising_threshold) { power_enabled = true; enable_power_output(); } else if (power_enabled && voltage <= uvlo_falling_threshold) { power_enabled = false; disable_power_output(); } ``` 通过合理配置UVLO的上升和下降阈值,可以有效提升系统的可靠性和抗干扰能力,特别是在使用电池供电的设备中,如移动设备或嵌入式系统,避免因电池电压骤降而导致的意外关机或系统异常[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值