Reflect
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 274 Accepted Submission(s): 162
Problem Description
We send a light from one point on a mirror material circle,it reflects
N
times and return the original point firstly.Your task is calcuate the number of schemes.
Input
First line contains a single integer
T(T≤10)
which denotes the number of test cases.
For each test case, there is an positive integer N(N≤106) .
For each test case, there is an positive integer N(N≤106) .
Output
For each case, output the answer.
Sample Input
1 4
Sample Output
4
官方贴出的题解:
套个欧拉函数即可。
AC代码:
#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
using namespace std;
const int MAXN = 1e6 + 6;
int n, a[MAXN];
void work()
{
for(int i = 1; i < MAXN; ++i)
a[i] = i;
for(int i = 2; i < MAXN; i += 2)
a[i] >>= 1;
for(int i = 3; i < MAXN; i += 2)
if(a[i] == i)
for(int j = i; j < MAXN; j += i)
a[j] -= a[j] / i;
}
int main(int argc, char const *argv[])
{
int t;
scanf("%d", &t);
work();
while(t--) {
scanf("%d", &n);
printf("%d\n", a[n + 1]);
}
return 0;
}