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;
}
相关推荐
CS创新实验室7 小时前
算法、齿轮与硅基大脑:数值计算发展简史
人工智能·算法·数值计算
海石8 小时前
1563分的简单题,可能就简单在能被暴力AC
算法·leetcode
海石8 小时前
1400分的dp汗流浃背之【交替子数组计数】
算法·leetcode
奋发向前wcx9 小时前
P2590 树的统计 题目解析
数据结构·算法·深度优先
imbackneverdie9 小时前
AI4S不止于分子药物:以MedPeer为代表的科研基建打开产业新增量
大数据·人工智能·算法·aigc·科研·学术·ai 4s
额鹅恶饿呃10 小时前
C语言中的数据结构和变量
c语言·数据结构·算法
运行时记录12 小时前
prompt-optimizer skill
算法
万法若空12 小时前
【数据结构-哈希表】哈希表原理
数据结构·算法·散列表
退休倒计时12 小时前
【每日一题】LeetCode 437. 路径总和 III TypeScript
算法·leetcode·typescript
学逆向的12 小时前
汇编——内存
开发语言·汇编·算法·网络安全