题目意思是给你a c m r0四个数 根据rn=(a*rn-1+c)%m 求rn 并从中求出 ri-rj的最大值 条件是ri跟rj是最近的值且ri>rj
肯定会循环,所以求出r的序列,用数组标记下 在遍历一遍,从中找到最大值
#include<stdio.h>
#define N 16000005
int b[N]={0};
int main()
{
long a,c,m,r,i,j,max=0,t;
scanf("%ld%ld%ld%ld",&a,&c,&m,&r);
a%=m;
c%=m;
b[r]=1;
while(1)
{
r=(r%m*a%m+c)%m;
if(b[r])break;
b[r]=1;
}
/* for(i=0;i<m;i++)
if(b[i])break;
t=i;*/
t=m;
for(i=0;i<m;i++)
{
if(b[i])
{
if(max<i-t)max=i-t;
t=i;
}
}
printf("%ld\n",max);
return 0;
}