A -- Alarm
Time Limit:1s Memory Limit:128MByte
Submissions:216Solved:75
DESCRIPTION
Given a number sequence [3,7,22,45,116,...][3,7,22,45,116,...]. Please tell me the kk-th number.
INPUT
A number T (T<100)T (T<100) indicates the number of the input cases. Then for each case there only is one integer k (1≤k≤10000)k (1≤k≤10000).
OUTPUT
For each case, ouput the kk-th number of the sequence in one line.
SAMPLE INPUT
2 1 4
SAMPLE OUTPUT
3 45
解题思路:可发现,序列规律为2^2-1,3^2-2,5^2-3,7^2-4,11^2-5,素数打表筛选素数,然后打一个答案表,第10000个素数大概是11W多,注意平方后用long long。
代码如下:
#include <cstdio> #include <cstring> long long su[120000]; long long biao[15000]; void shaisu() { memset(su,0,sizeof(su)); for(long long i=2;i<120000;i++)//素数打表 { if(su[i]==1) continue; for(long long j=i*2;j<120000;j=j+i) { su[j]=1; } } su[0]=1; su[1]=1; } void dabiao()//答案打表 { memset(biao,0,sizeof(biao)); long long num=1; for(long long i=2;i<120000;i++) { if(su[i]==0) { biao[num]=i*i-num; num++; } } } int main() { long long t; shaisu(); dabiao(); scanf("%lld",&t); while(t--) { long long a; scanf("%lld",&a); printf("%lld\n",biao[a]); } return 0; }