• 洛谷P2158仪仗队(数学,观察找规律,欧拉函数)


    题目链接:https://www.luogu.org/problemnew/show/P2158

    读完题被吓到了,这是什么东西。

    总之,需要观察+找规律啊!观察可以发现,从第三行开始,第i行中当前直角三角形范围内能观察到的点数等于(i-1)的欧拉函数值

     1 #include <iostream>
     2 #include <string>
     3 #include <algorithm>
     4 #include <cstdio>
     5 #include <cstring>
     6 using namespace std;
     7 typedef long long ll;
     8 typedef unsigned long long ull;
     9 const int maxn=1e3+5;
    10 const int inf=1e9;
    11 int vis[maxn];
    12 int n,ans;
    13 
    14 int Euler(int n)
    15 {
    16     if(n==1) return 1;
    17     int ans=n;
    18 
    19     for(int i=2;i*i<=n;++i)
    20     {
    21         if(n%i==0)
    22         {
    23             while(n%i==0) n/=i;
    24             ans=ans/i*(i-1);
    25         }
    26     }
    27     if(n!=1) ans=ans/n*(n-1);
    28 
    29     return ans;
    30 }
    31 
    32 int main()
    33 {
    34     ios::sync_with_stdio(false); cin.tie(0);
    35 
    36     cin>>n;
    37 
    38     if(n==1)
    39     {
    40         putchar('');
    41         return 0;
    42     }
    43     for(int i=3;i<=n;i++) ans+=Euler(i-1);
    44 
    45     cout<<ans*2+3<<endl;
    46     
    47     //或者下面写法
    48     //for(int i=1;i<=n-1;i++) ans+=Euler(i);
    49     //cout<<ans*2+1<<endl;
    50 
    51     return 0;
    52 }

    完。

  • 相关阅读:
    第三周学习进度条
    绘制echarts折线图
    第二周学习进度条
    返回一个整数数组中最大子数组的和
    软件工程第二周开课博客
    第一周学习进度条
    学习进度
    学习进度
    学习进度
    HDU 4906 (dp胡乱搞)
  • 原文地址:https://www.cnblogs.com/redblackk/p/9787221.html
Copyright © 2020-2023  润新知