xtuoj 随机数

题目

思路

这个地方按照题目给定的表达式进行操作即可,可以看到这个地方%m,所以产生的数只能在0~m-1之间,即最多有m个状态,周期最大为m,所以我们取前m个即可查看是否能产生0~m-1的数,我们可以采用一个标志数组,这个标志数组的下标就对应0~m-1这些数,先初始化为0,代表未产生,后面产生的x,我们可以就用x这个变量,也可以用x数组,然后最后判断的时候,可以遍历这个标志数组,如果有一个数未产生,直接输出No,直接结束判断,如果循环遍历完成,则说明m个数都产生了,输出Yes;还有一种思路,就是用cnt记录标志数组有多少个1,标志数组为1,则说明产生了这个数,如果cnt==m,则输出Yes,否则输出No

代码一

cpp 复制代码
#include<stdio.h>
#include<stdbool.h>

int main(){
    int a,c,m,x=0;
    while(scanf("%d%d%d",&a,&c,&m)!=EOF){
    int cnt=0;
    bool arr[10010]={false};
    arr[0]=true;
    for(int i=0;i<m;i++){
        x=(a*x+c)%m;
        arr[x]=true;
    }
    for(int i=0;i<m;i++){
        if(arr[i]==true) cnt++;
    }
    if(cnt==m) printf("Yes\n");
    else printf("No\n");   
    }
    
    return 0;
}

代码二

cpp 复制代码
#include<stdio.h>
#define N 10010

int a,c,m;
int x[N];

int main(){
	while(~scanf("%d%d%d",&a,&c,&m)){
		x[0]=0;
		int y[N]={0};
		for(int i=0;i<m;i++){
			x[i+1]=(a*x[i]+c)%m;
			y[x[i]]=1;
		}
		int flag=0;
		for(int i=0;i<m;i++){
			if(y[i]==0){
				flag=1;
				printf("No\n");
				break;
			}
		}
		if(!flag) printf("Yes\n");
	}
	
	return 0;
}

代码三

cpp 复制代码
#include<stdio.h>

int a,c,m,x,flag;

int main(){
	while(~scanf("%d%d%d",&a,&c,&m)){
		int y[10010]={0};
		x=0;
		for(int i=0;i<m;i++){
			x=(a*x+c)%m;
			y[x]=1;
		}
		int flag=0;
		for(int i=0;i<m;i++){
			if(y[i]==0){
				flag=1;
				printf("No\n");
				break;
			}
		}
		if(!flag) printf("Yes\n");
	}
	
	return 0;
}
相关推荐
QiLinkOS2 分钟前
发明人与专利价值共生逻辑
c语言·数据结构·c++·人工智能·单片机·嵌入式硬件·算法
计算机安禾14 分钟前
【算法分析与设计】第21篇:回溯法的状态空间树与剪枝函数设计
大数据·人工智能·算法·机器学习·数据挖掘·剪枝
磊 子15 分钟前
STL之set以及set和map区别
开发语言·c++·算法
Promise微笑24 分钟前
算法突围:“双核四驱”理论下的“官网”AI引用概率提升指南
人工智能·算法·chatgpt
KaMeidebaby30 分钟前
卡梅德生物技术快报|免疫共沉淀 - Co-IP 实验在转录因子 ATF3/Smad4 蛋白互作研究中的应用实例解析
网络·人工智能·网络协议·tcp/ip·其他·算法·新浪微博
wayz1135 分钟前
20260530 软件ETF(159852)量化分析
算法·金融·数据分析·量化交易
通信小呆呆1 小时前
Hankel结构及其快速算法详解
线性代数·算法·机器学习
四代水门1 小时前
服务端倒带(Server-Side Rewind)命中判定系统
java·前端·算法
吃好睡好便好1 小时前
矩阵的左除和右除
人工智能·学习·线性代数·算法·矩阵
江屿风1 小时前
C++图的基本概念流食般投喂-竞赛编
开发语言·数据结构·c++·笔记·算法·图论