由于是对称的图形只要求一边得出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;
}
}
原文地址:http://www.cnblogs.com/Mr-Xu-JH/p/3863291.html