POJ 3090

由于是对称的图形只要求一边得出sum;sum=sum*2+1就好了
把起点定为原点,建立坐标系,能看到的点与原点连线的斜率是不一样的,也就是说,点(X,Y)K=Y/X(K<1)每一个K要不同;
1/2出现了2/4就不能出现,从1开始计算,也就是要找分子与分母不能约分的斜率;
想到的就是欧拉函数;



#include <iostream> #include <cstdio> #include <algorithm> using namespace std; typedef long long ll; #define max 1010 ll phi[max]; int n; void getphi(){ for(int i=0;i<max;i++)phi[i]=0; phi[1]=1; for(int i=2;i<max;i++){ if(!phi[i]){ for(int j=i;j<max;j+=i){ if(!phi[j])phi[j]=j; phi[j]=phi[j]/i*(i-1); } } } } int main(){ getphi(); int c; //freopen("test.txt","r",stdin); cin>>c; for(int i=1;i<=c;i++){ cin>>n; ll sum=0; for(int i=0;i<=n;i++){ sum+=phi[i]; } cout<<i<<" "<<n<<" "<<1+2*sum<<endl; } }
posted @ 2014-07-23 16:15  Mr.XuJH  阅读(226)  评论(0编辑  收藏  举报