题目描述
题目描述
33DAI 想要生成一个比较随机的数列,但是他忘记了比较好的随机数生成器该怎么写了,于是写下了下面这串代码。
#include <bits/stdc++.h>using namespace std;
int main()
{
int seed = 33;
while (1)
{
cout << seed << "\n";
seed = seed * seed % 233;
}
return 0;
}
显然这串代码在运行后会陷入死循环,一直不停地输出,每行会输出一个整数。请你帮他算算他输出的第 xx 行是多少。
输入格式
第一行一个整数 xx。
输出格式
输出一个整数,即上面代码输出的第 xx 行的内容。
输入1:
1
输出1:
33
输入2:
3
输出2:
184
输入3:
16
输出3:
46
样例解释
上方代码输出的前 16 行如下:
33
157
184
71
148
2
4
16
23
63
8
64
135
51
38
46
数据规模与约定
对于 100%100% 的数据,1≤x≤10121≤x≤1012。
- 子任务 1(30 分):1≤x≤1001≤x≤100
- 子任务 2(30 分):x=109x=109
- 子任务 3(40 分):没有特殊限制。
#include<bits/stdc++.h>
using namespace std;
int main(){
long long seed = 33,a;
cin>>a;
if(a==1){
cout<<33;
return 0;
}
if(a>58)a=a%28;
for(int i=1;i<a;i++){
seed = seed * seed % 233;
}
cout<<seed<<"\n";
return 0;
}