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;
}