欧拉函数裸题。能看见就必须满足前面没有在同一斜率上的点,即,而且,所以只需要算一半*2即可。对于每一个i,的数的个数其实就是它的欧拉函数值..但是注意n不要算以及还有3个点最后要加就行了

#include <bits/stdc++.h>

#define ll long long
#define inf 0x3f3f3f3f
#define il inline

namespace io {

    #define in(a) a=read()
    #define out(a) write(a)
    #define outn(a) out(a),putchar('\n')

    #define I_int ll
    inline I_int read() {
        I_int x = 0 , f = 1 ; char c = getchar() ;
        while( c < '0' || c > '9' ) { if( c == '-' ) f = -1 ; c = getchar() ; }
        while( c >= '0' && c <= '9' ) { x = x * 10 + c - '0' ; c = getchar() ; }
        return x * f ;
    }
    char F[ 200 ] ;
    inline void write( I_int x ) {
        if( x == 0 ) { putchar( '0' ) ; return ; }
        I_int tmp = x > 0 ? x : -x ;
        if( x < 0 ) putchar( '-' ) ;
        int cnt = 0 ;
        while( tmp > 0 ) {
            F[ cnt ++ ] = tmp % 10 + '0' ;
            tmp /= 10 ;
        }
        while( cnt > 0 ) putchar( F[ -- cnt ] ) ;
    }
    #undef I_int

}
using namespace io ;

using namespace std ;

#define N 1010
int p[N], cnt, n, phi[N];
int vis[N];
ll sum[N];

void calc(int n) {
    phi[1] = 1;
    for(int i = 2; i <= n; ++i) {
        if(!vis[i]) p[++cnt] = i, phi[i] = i - 1;
        for(int j = 1; j <= cnt && i * p[j] <= n; ++j) {
            vis[i * p[j]] = 1;
            if(i % p[j] == 0) {
                phi[i * p[j]] = phi[i] * p[j];
                break;
            }
            phi[i * p[j]] = phi[i] * (p[j] - 1); 
        }
    }
    for(int i = 2; i <= n; ++i) sum[i] = sum[i - 1] + phi[i];
}

int main() {
    calc(1000);
    int Cas = 0;
    int T; scanf("%d", &T);
    while(T--) {
        scanf("%d", &n);
        printf("%d %d ", ++Cas, n);
        printf("%lld\n", sum[n] * 2 + 3);
    }
}