uva 350 - Pseudo-Random Numbers

作者分享了一段关于解决编程问题的经历,在享受了午休之后轻松解决了问题,并通过使用C语言实现了一个涉及循环和数学运算的小程序。该程序通过哈希函数来跟踪和计算特定数值序列的周期。

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

跟前一题一样,睡醒中午觉就是爽,一看就会做。

其实我当时考虑到效率还打算搞个hash函数,可是。。。其实也是打了,一一对应的,哈啊

#include <stdio.h> #include <string.h> int z, i, m, l; bool isVis[10000]; int data[10000]; int count = 0; int gcd(int a, int b) { return b == 0 ? a : gcd(b, a % b); } int main() { //#define TEST #ifdef TEST freopen("input.txt", "r", stdin); #endif int k = 1; while(true) { scanf("%d%d%d%d", &z, &i, &m, &l); if(z == 0 && i == 0 && m == 0 && l == 0) break; memset(isVis, false, sizeof(isVis)); isVis[l] = true; count = 1; data[0] = l; while(true) { l = (z * l + i) % m; if(isVis[l]) break; isVis[l] = true; data[count++] = l; } int i = 0; for(; ; i++) { if(data[i] == l) break; } printf("Case %d: %d/n", k++, count - i); } return 0; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值