zoukankan      html  css  js  c++  java
  • 【解题报告】luoguP2158 仪仗队

    【解题报告】luoguP2158 仪仗队

    原题链接:https://www.luogu.com.cn/problem/P2158

    思路

    这道题目经过分析,我们可以发现一个结论

    即对于每一个点((x,y)),如果能被看到,则一定不存在一个点((dfrac x m,dfrac y m),m, dfrac x m,dfrac y min Z,)

    因为他们属于同一斜率(k= dfrac y x)

    观察可以得到,因为他们没有一个 (m) 可以使上面的上面的式子成立,即(gcd(x,y)= 1)

    然后直接求gcd的话肯定是不行的,然后我们继续看

    实际上对于一个固定的 (x) ,我们要统计的是一个数字 (yin [1,n]) 让他们互质,所以我们要求的是x的欧拉函数

    代码

    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    #include <string>
    using namespace std;
    int n,ans;
    int ola(int n)
    {
    	int res=n;
    	for(int i=2;i*i<=n;i++)
    	{
    		if(n%i==0)
    		{
    			res-=res/i;
    			while(n%i==0)
    			n/=i;
    		}
    	}
    	if(n>1)
    	res-=res/n;
    	return res;
    }
    int main()
    {
    	cin>>n;
    	if(n==1)
    	{
    		cout<<0<<'
    ';
    		return 0;
    	}
    	for(int i=2;i<=n-1;i++)
    	ans+=ola(i);
    	cout<<ans*2+3<<'
    ';//另一半加上少算的三个 
    	return 0; 
    }
    
    本博文为wweiyi原创,若想转载请联系作者,qq:2844938982
  • 相关阅读:
    Shader-另类实现
    Unity3d- 资源
    我不快乐
    陷入了一个NGUI自适应的一个坑
    ngui 自适应
    NGUI的数据绑定
    我已经很努力,但是依旧写给自己
    那些奇葩的叫法
    C#修改类模板
    开启Unity3D之旅
  • 原文地址:https://www.cnblogs.com/wweiyi2004/p/15305493.html
Copyright © 2011-2022 走看看