Reflect
从镜面材质的圆上一点发出一道光线反射N次后首次回到起点。
问本质不同的发射的方案数。
第一行一个整数T,表示数据组数。T≤10 对于每一个组,共一行,包含一个整数,表示正整数N(1≤N≤106)。
对于每一个组,输出共一行,包含一个整数,表示答案。
1 4
4
官方题解:
思路:就是求解1到n+1中与n+1互质的个数。典型的欧拉函数。
CODE:
#include <iostream>
using namespace std;
int euler(int n){
int res=n,a=n;
for(int i=2;i*i<=a;i++){
if(a%i==0){
res=res/i*(i-1);
while(a%i==0) a/=i;
}
}
if(a>1) res=res/a*(a-1);
return res;
}
int main()
{
int t; cin>>t;
while(t--){
int n;
cin>>n;
cout<<euler(n+1)<<endl;
}
return 0;
}