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.
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.
For each test case, there is an positive integer N(N≤106) .
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.
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
题意:从圆上一点出发,求发射n次回到起始点的方法一共有多少种?
这个是当时BC上的解析,都是大神发现的的规律。在这里感谢龙哥,不是龙哥的陪伴,不可能当时能做上这道题,还加分100多
转换成求1到n+1中与n+1互质的数的个数
直接欧拉函数求解
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
#define bint __int64
#define N 3000001
bint phi[N];
void init()//筛选法求N以内所有数的欧拉函数值
{
int i, j;
for(i = 1; i < N; i++)
phi[i] = i;
for(i = 2; i < N; i++)
if(i == phi[i])
for(j = i; j < N; j += i)
phi[j] = (phi[j] / i) * (i - 1);
}
int main()
{
init();
int T;
scanf("%d",&T);
while(T--)
{
int n;
scanf("%d",&n);
printf("%lld\n",phi[n+1]);
}
return 0;
}