zoukankan      html  css  js  c++  java
  • POJ 3090

    题意

    求从(0,0)出发有多少个点与其连线(不在同一直线上)有多少条

    思路

    看左上部分和右下部分条数相同, 中间有一条k=1/2的连线
    推出
    n = 2 , ans = 2*2+1 = 5
    n = 3 , ans = 2*4+1 = 9
    n = 3 , ans = 2*6+1 = 13
    n = 3 , ans = 2*10+1 = 21

    其中的2, 4, 6, 10, … 正好是欧拉函数的前n项和
    对欧拉函数的值反应还是不敏感

    AC代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<set>
    #include<cmath>
    using namespace std;
    const int maxn = 1000+5;
    int r[maxn];
    
    void euler()
    {
        for( int i = 0; i <= maxn; i++ )
            r[i] = i;
        for( int i = 2; i <= maxn; i++ )
            if( r[i] == i )
                for( int j = i; j <= maxn; j += i )
                    r[j] = r[j] / i * (i-1);
    }
    
    int main()
    {
        int T, n;
        euler();
        for( int i = 2; i <= maxn; i++ )
            r[i] += r[i-1];
        scanf("%d",&T);
        for(int t = 1; t <= T; t++)
        {
            scanf("%d",&n);
            printf("%d %d %d
    ", t, n, r[n]*2+1 );
        }
        return 0;
    }
  • 相关阅读:
    Freefilesync-文件夹自动同步
    考研打卡_Day077
    考研打卡_Day076
    考研打卡_Day075
    考研打卡_Day074
    考研打卡_Day073
    考研打卡_Day072
    考研打卡_Day071
    考研打卡_Day070
    考研打卡_Day069
  • 原文地址:https://www.cnblogs.com/JinxiSui/p/9740532.html
Copyright © 2011-2022 走看看