题意:求从左下角能看到的元素个数
引理:对点(x,y),连线(0,0)-(x,y),元素个数为gcd(x,y)-1(中间元素)
即要求gcd(x,y)=1
求gcd(x,y)=1的个数
转化为2 sum_(i=1)^(n-1) phi(i) - 1 (思考如何转化)
感性分析,理性计算
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n,phi[100005]; 5 6 int main(){ 7 cin>>n; 8 phi[1]=1; 9 for(int i=2;i<=n;i++) phi[i]=i; 10 for(int i=2;i<=n;i++) 11 if(phi[i]==i) 12 for(int j=i;j<=n;j+=i) 13 phi[j]=phi[j]/i*(i-1); 14 long long ans=0; 15 for(int i=1;i<n;i++) ans+=phi[i]; 16 if(n==1) cout<<0; 17 else cout<<2*ans+1<<endl; 18 return 0; 19 }