ural 1104 && ural 1352

题目:http://acm.timus.ru/problem.aspx?space=1&num=1352

题意:首先定义梅森尼质数:符合 2 ^  p - 1是素数的数,现在给出一个 n 让你输出一个 p 满足 2 ^ p - 1 是第 n 个梅森尼质数 ( n < 39)

打表的过的,就没什么可说的了

View Code
 1 const int x[]={0,2,3,5,7,13,17,19,31,61,89,
 2                107,127,521,607,1279,2203,2281,3217,4253,4423,
 3             9689,9941,11213,19937,21701,23209,44497,86243,110503,132049,
 4         216091,756839,859433,1257787,1398269,2976221,3021377,6972593};
 5 int t,n;
 6 int main()
 7 {
 8     cin>>t;
 9     while (t--)
10     {
11         cin>>n;
12         cout<<x[n]<<endl;
13     }
14     return 0;
15 }

 

题目:http://acm.timus.ru/problem.aspx?space=1&num=1104

题意:给出一个 k 进制写的数,问是否存在一个 k可以满足把 给的 k 进制的数可以整除 (k - 1);

发现 ural 里的discuss 真有意思,错了哪个样例,基本都可以在里面找到解决办法。以前好像做个这个题,觉得好熟悉,根据取余的性质 (a * b) % c = (a % c * b % c) % c;

View Code
 1 const int N = 1000001;
 2 char str[N];
 3 int a[N];
 4 int main()
 5 {
 6     int i,j;
 7     //freopen("data.txt","r",stdin);
 8     while(cin>>str)
 9     {
10         int len = strlen(str);
11         int tem = 0;
12         for(i = 0; i < len; i++)
13         {
14             if(str[i] >= 'A' && str[i] <= 'Z')
15             a[i] = (str[i] - 'A' + 10);
16             else a[i] = str[i] - '0';
17             tem = Max(a[i],tem);
18         }
19         if(tem < 2) {printf("2\n");continue;}  // 注意这里,如果不写,会在第 7 个样例 crash(我的是这样的)
20         int kem;
21         for(i = tem + 1; i <= 36; i++)  // 这里 符合题意的最小 k 一定要比给的进制里最大的还要大
22         {
23             kem = 0;
24             for(j = 0; j < len; j++)
25             {
26                 kem = kem * i + a[j];
27                 kem %= (i - 1);
28             }
29             if(!kem) break;
30         }
31         if(!kem) printf("%d\n",i);
32         else printf("No solution.\n");
33     }
34     return 0;
35 }

 

 

 

posted @ 2012-09-10 11:09  AC_Girl  阅读(152)  评论(0编辑  收藏  举报