Reflect
Time Limit: 2000/1000 MS (Java/Others)
Memory Limit: 65536/65536 K (Java/Others)
问题描述
从镜面材质的圆上一点发出一道光线反射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;
}
本文探讨了从镜面材质的圆上一点发出光线反射特定次数后首次回到起点的问题,通过数学分析,利用欧拉函数求解不同发射方案的数量。详细介绍了问题背景、输入输出描述、官方题解及代码实现。
&spm=1001.2101.3001.5002&articleId=48294051&d=1&t=3&u=b92484e0d1f94fc9b5a1c4ec5d0579ec)
476

被折叠的 条评论
为什么被折叠?



