UVa #11582 Colossal Fibonacci Numbers! (例题10-1)

本文介绍了如何通过预处理求出斐波那契模数列的周期,进而快速计算给定指数下数值在周期中的位置。运用了模算术、幂取模以及分治法取模的迭代版本,提供了高效解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

预处理求出n分别为1-1000时斐波那契模数列的周期,之后求出a^b是周期中第几个即可。


复习了模算术、幂取模,顺便学习了分治法取模的迭代版本。



Run Time: 0.072s

#define UVa  "LT10-1.11582.cpp"		//Colossal Fibonacci Numbers!
char fileIn[30] = UVa, fileOut[30] = UVa;

#include<cstring>
#include<cstdio>
#include<algorithm>

using namespace std;


//Global Variables. Reset upon Each Case!
typedef unsigned long long ULL;
const int maxn = 1000 + 5;
int m[maxn];
unsigned long long f[maxn][3100];
unsigned long long a,b;
int n;
/////


int power(ULL a, ULL b, int t) {
    ULL result = 1;
    while(b) {
        if(b%2) {
            result = (a*result)%t;
        }
        a = (a*a)%t;
        b/=2;
    }
    return result;
}


int main() {
    for(n = 2; n <= 1000; n ++) {
        int tmp = 0;
        f[n][0] = 0, f[n][1] = 1;
        for(int i = 2; ; i ++) {
            f[n][i] = (f[n][i-2]%n + f[n][i-1]%n) % n;
            if(f[n][i] == 1 && f[n][i-1] == 0) {
                m[n] = i-1;
                break;
            }
        }
    }

    int T;
    scanf("%d", &T);
    while(T--) {
        scanf("%llu%llu%d", &a, &b, &n);
        if(a == 0 || n == 1) printf("0\n");
        else printf("%d\n", f[n][power(a%m[n], b, m[n])]);
    }

    return 0;
}

### Colossal-AI框架介绍 Colossal-AI 是一个专为大规模深度学习模型设计的分布式训练和推理平台[^3]。该框架旨在通过提供高效的并行化策略来加速大型神经网络的开发过程,从而使得研究人员能够更轻松地处理复杂的机器学习任务。 #### 主要特点 - **多维混合并行技术**:支持数据、张量以及流水线三种类型的并行方式组合使用,可以显著减少内存占用并提高计算效率。 - **自动混合精度训练**:内置了对 FP16 和 BF16 的支持,在不影响收敛性的前提下加快训练速度并降低显存消耗。 - **灵活易用API接口**:提供了简洁直观的操作界面,让用户无需深入了解底层实现细节即可快速上手应用。 - **丰富的工具集**:除了核心引擎外还配备了一系列辅助组件如检查点管理器、日志记录器等,帮助开发者更好地管理和监控实验进展。 ### 使用教程 为了开始使用 Colossal-AI 进行项目开发,以下是几个基本步骤: 安装依赖环境可以通过 pip 或者 conda 完成: ```bash pip install colossalai ``` 定义模型结构时继承自 `BaseModel` 类,并重写 forward 方法完成前向传播逻辑: ```python from colossalai.nn import BaseModel class MyModel(BaseModel): def __init__(self, ...): super().__init__() ... def forward(self, input_ids=None, attention_mask=None, labels=None): ... ``` 配置参数文件用于指定硬件资源分配方案以及其他超参设置: ```yaml parallel: data: 2 tensor: [4, 2] training: lr: 0.001 epochs: 10 ``` 启动训练流程之前先实例化 Trainer 对象并将上述各部分组装起来: ```python import torch.distributed as dist from colossalai.trainer import Trainer from my_model import MyModel from config import get_config if not dist.is_initialized(): dist.init_process_group(&#39;nccl&#39;) model = MyModel(...) config = get_config() trainer = Trainer(model=model, train_dataloader=..., eval_dataloaders=[...], criterion=torch.nn.CrossEntropyLoss(), optimizer=torch.optim.AdamW(params=model.parameters(), lr=config[&#39;lr&#39;]), max_epochs=config[&#39;epochs&#39;], parallel_mode=&#39;tensor&#39;, checkpoint_path=&#39;./checkpoints&#39;) trainer.fit() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值