virtual hust 2013.6.20 数论基础题目 F - Pseudo-Random Numbers

题目:Pseudo-Random Numbers

思路:存在循环节,注意开始一部分不一定是循环的

 

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <vector>
using namespace std;
long long z,i,mod,l;
long long num[10000000];
long long fun(long long x)
{
    return (z*x+i)%mod;
}
int main()
{
    int t=0;
    while(scanf("%lld%lld%lld%lld",&z,&i,&mod,&l)!=EOF)
    {
        if(z+i+mod+l==0)
            break;
        int tnt=0;
        num[0]=l;
        int x;
        while(1)
        {
            int tag=1;
            for(x=tnt-1;x>0;x--)
            {
                if(num[x]==num[tnt])
                {
                    tag=0;
                    break;
                }
            }
            if(tag==0)
                break;
            l=fun(l);
            //cout<<l<<endl;
            num[++tnt]=l;
        }
        printf("Case %d: %d\n",++t,tnt-x);
    }
    return 0;
}
View Code

 

posted @ 2013-06-20 20:31  over_flow  阅读(151)  评论(0编辑  收藏  举报