hdu 5391 Zball in Tina Town 解题报告

Zball in Tina Town

 
 Accepts: 478
 
 Submissions: 2073
 Time Limit: 3000/1500 MS (Java/Others)
 
 Memory Limit: 262144/262144 K (Java/Others)
问题描述
Tina Town 是一个善良友好的地方,这里的每一个人都互相关心。
Tina有一个球,它的名字叫zball。zball很神奇,它会每天变大。在第一天的时候,它会变大11倍。在第二天的时候,它会变大22倍。在第nn天的时候,它会变大nn倍。
zball原来的体积是11。Tina想知道,zball在第n-1n1天时的体积对nn取模是多大呢?
Tina是一个蠢蠢的女孩子,当然不会算啦,所以她请你帮她算出这个答案呢。
输入描述
第一行一个正整数TT,表示数据组数
接下来TT行,每行一个正整数nn,意义如题面所述
T \leq 10^5,2 \leq n \leq 10^9T105,2n109
输出描述
对于每组数据,输出一个正整数,表示答案。
输入样例
2
3
10
输出样例
2
0

刚看到题,就感觉是有规律的。然后直接打表,找到了规律,n=(1,--)

1 1 2 2 4 0 6 0 0 0 10 0 12 0 0 0 16 0 18 0 0 0 22 0 0 0 0 0 28 0 30 0 0 0 0 0 36 0 0 0 40 0 42 0 0 0 46 0 0 0 0 0 52 0 0 0 0 0 58 0 60 0 0 0 0 0 66 0 0 0 70 0 72 0 0 0 0 0 78 0 0 0 82 0 0 0 0 0 88 0 0 0 0 0 0 0 96 0 0 0 100 0 102 0 0 0 106 0 108 0 0 0 112 0 0 0 0 0 0 0 0 0 0 0 0 0 126 0 0 0 130 0 0 0 0 0 136 0 138 0 0 0 0 0 0 0 0 0 148 0 150 0 0 0 0 0 156 0 0 0 0 0 162 0 0 0 166 0 0 0 0 0 172 0 0 0 0 0 178 0 180 0 0 0 0 0 0 0 0 0 190 0 192 0 0 0 196 0 198 0 0 0 0 0 0 0 0 0 0 0 210 0 0 0 0 0 0 0 0 0 0 0 222 0 0 0 226 0 228 0 0 0 232 0 0 0 0 0 238 0 240 0 0 0 0 0 0 0 0 0 250 0 0 0 0 0 256 0 0 0 0 0 262 0 0 0 0 0 268 0 270 0 0 0 0 0 276 0 0 0 280 0 282 0 0 0 0 0 0 0 0 0 292 0 0 0 0 0 0 0 0 0 0 0 0 0 306 0 0 0 310 0 312 0 0 0 316 0 0 0 0 0 0 0 0 0 0 0 0 0 330 0 0 0 0 0 336 0 0 0 0 0 0 0 0 0 346 0 348 0 0 0 352 0 0 0 0 0 358 0 0 0 0 0 0 0 366 0 0 0 0 0 372 0 0 0 0 0 378 0 0 0 382 0 0 0 0 0 388 0 0 0 0 0 0 0 396 0 0 0 400 0 0 0 0 0 0 0 408 0 0 0 0 0 0 0 0 0 418 0 420 0 0 0 0 0 0 0 0 0 430 0 432 0 0 0 0 0 438 0 0 0 442 0 0 0 0 0 448 0 0 0 0 0 0 0 456 0 0 0 460 0 462 0 0 0 466 0 0 0 0 0 0 0 0 0 0 0 478 0 0 0 0 0 0 0 486 0 0 0 490 0 0 0 0 0 0 0 498 0 0 0 502 0 0 0 0 0 508 0 0 0 0 0 0 0 0 0 0 0 520 0 522 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 540 0 0 0 0 0 546 0 0 0 0 0 0 0 0 0 556 0 0 0 0 0 562 0 0 0 0 0 568 0 570 0 0 0 0 0 576 0 0 0 0 0 0 0 0 0 586 0 0 0 0 0 592 0 0 0 0 0 598
前几个特殊处理下,然后是个n为素数,则输出素数-1,若不是素数,则为0

代码:

#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cmath>
using namespace std;
//借鉴了荣耀大神的快速判断素数
bool prime (long long num)
{
    if (num == 2 || num == 3 || num == 5)
        return true;
    if (num % 2 == 0 || num % 3 == 0 || num % 5 == 0 || num == 1)
        return false;

    long long c = 7;
    int maxc = (int)(sqrt (num));
    while (c <= maxc)
    {
        if (num % c == 0)
            return false;
        c += 4;
        if (num % c == 0)
            return false;
        c += 2;
        if (num % c == 0)
            return false;
        c += 4;
        if (num % c == 0)
            return false;
        c += 2;
        if (num % c == 0)
            return false;
        c += 4;
        if (num % c == 0)
            return false;
        c += 6;
        if (num % c == 0)
            return false;
        c += 2;
        if (num % c == 0)
            return false;
        c += 6;
    }
    return true;
}
int main()
{
    int a[10]={0,1,1,2,2,4};
    int T;
    long long n;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lld",&n);
        if(n<5)printf("%d\n",a[n]);
        else
        {
            if(prime(n))printf("%lld\n",n-1);
            else printf("0\n");
        }
    }
    return 0;
}


你可能感兴趣的:(ACM)