关闭

HDU 5430 Reflect 欧拉函数

231人阅读 评论(0) 收藏 举报
分类:
We send a light from one point on a mirror material circle,it reflectsN times and return the original point firstly.Your task is calcuate the number of schemes.


 

Input
First line contains a single integer T(T10) 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(N106).
 

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


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:13603次
    • 积分:618
    • 等级:
    • 排名:千里之外
    • 原创:50篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条