E - Geometric Progression

文章介绍了如何解决在atcoder.jp上的E-GeometricProgression题目,通过观察和分析,提出使用线性算法和二进制优化方法来计算从0到m-1的次方和。在处理大数x(1e12)时,避免直接暴力计算,转而采用二进制表示,逐位处理并更新答案和乘数,最终给出相应的C++代码实现。

E - Geometric Progression (atcoder.jp)

这个题要求从 0 到 m - 1 的次方和。通过写下样例观察不难发现,这道题可以线性的做,又因为 x 的大小是 1e12 ,直接暴力肯定是不行的,所以这个题我们可以想到二进制优化,像如果这个数表示成二进制的话,最多 2 的 40次方就肯定够用了。所以这个题可以二进制来做。

然后观察这个求和的序列,我们不难发现,后面的次方一定大于前面的次方,这样我们可以考虑从第一个开始,每次加上一个数,然后乘上一个数。比如说一开始是 3 ^ 0 ,然后加上一个数再乘就变成 3 ^ 1 + 3 ^ 0 了。所以这个题的关键是处理怎么二进制表示这个加上的这个数。

首先我们容易想到的是这个 x 一定可以用二进制表示,每次 >>= 1, 然后判断是不是 &1 ,来进行相乘,那么那个加的数呢,那个加的数我们也要采取二进制的方法,假设一开始是 uu ,然后每次uu = uu * (1 + a)  % m, 由于这个二进制的关系,每次我们都要让 uu 加上这个数。

代码如下:

#include <bits/stdc++.h>
#define int long long 
using namespace std;
signed main()
{
	int a, x, m; cin >> a >> x >> m;
	int ans = 0;
	int uu = 1;
	while (x)
	{
		if (x & 1)
			ans = (ans * a + uu) % m;
		uu = uu * (a + 1) % m;
		a = (a * a) % m, x >>= 1;
	}
	cout << ans << "\n";
	return 0;
}

### 安装 `torch-geometric` 库 为了成功安装 `torch-geometric` 库并确保其正常工作,建议按照特定顺序来安装所需的依赖包。以下是详细的安装指南: #### 1. 确认 PyTorch 版本与 CUDA 配置 在开始之前,确认已正确安装所需版本的 PyTorch 并配置好相应的 CUDA 版本。例如,如果使用的是 Python 3.x 和 CUDA 11.1,则应先通过如下命令安装合适的 PyTorch 版本: ```bash pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu111 ``` #### 2. 安装必要的扩展包 接着,依次安装四个主要的支持库 (`torch-scatter`, `torch-sparse`, `torch-cluster`, `torch-spline-conv`),这些库提供了图神经网络操作的基础功能。对于 PyTorch 1.8.0 + cu111 组合来说,具体命令如下所示[^1]: ```bash pip install torch-scatter==2.0.8 -f https://pytorch-geometric.com/whl/torch-1.8.0+cu111.html pip install torch-sparse==0.6.9 -f https://pytorch-geometric.com/whl/torch-1.8.0+cu111.html pip install torch-cluster==1.5.9 -f https://pytorch-geometric.com/whl/torch-1.8.0+cu111.html pip install torch-spline-conv==1.2.1 -f https://pytorch-geometric.com/whl/torch-1.8.0+cu111.html ``` #### 3. 安装 `torch-geometric` 当所有前置条件满足后,可以通过下面的方式安装目标版本的 `torch-geometric`[^3]: ```bash pip install torch-geometric==2.0.1 -f https://data.pyg.org/whl/torch-1.9.0+cu111.html ``` 注意,在某些情况下,如果不指定 `-f` 参数后面的 URL 或者不精确匹配 PyTorch/CUDA 版本组合,可能会遇到兼容性问题。 #### 4. 验证安装 完成以上步骤后,可以在 Python 中导入模块以验证是否安装成功: ```python import torch_geometric print(torch_geometric.__version__) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值