zoukankan      html  css  js  c++  java
  • [luogu6860]象棋与马

    根据扩欧$(a,b)=1$必须要满足,同时,若$a+b$为偶数则格子的”奇偶性“不变,因此$a+b$必须为奇数

    反过来,容易证明满足$(a,b)=1$且$a+b$为奇数则一定可行(构造从$(0,0)$到$(0,1)$的一组解即可)

    不妨假设$a$为奇数、$b$为偶数(答案再乘以2),分两类考虑:

    1.$a<b$,显然与$b$互素的数必然是奇数,因此即$sum_{2ile n}varphi(2i)$

    2.$a>b$,由于$(a,b)=1$等价于$(a,a-b)=1$,因此每一个小于$a$且与$a$互素的奇数与另一个偶数对应,因此即$sum_{2i+1le n}frac{varphi(2i+1)}{2}$

    不妨先把答案的2乘进去,那么即$f_{n}=sum_{i=1}^{n}varphi(i)+sum_{2ile n}varphi(2i)$(偶数要算两次)

    根据积性或$varphi$的计算过程,若$i$为奇数,则有$varphi(2i)=varphi(i)$,若$i$为偶数,则$varphi(2i)=2varphi(i)$

    对于$sum_{2ile n}varphi(2i)$,对$i$的奇偶性分类讨论,即$sum_{2ile n}varphi(2i)=sum_{4ile n}varphi(2i)+sum_{4i+2le n}varphi(2i+1)=f_{frac{n}{2}}$

    根据$f_{n}=sum_{i=1}^{n}varphi(i)+f_{frac{n}{2}}$,再用杜教筛优化,时间复杂度可以做到$o(Tn^{frac{2}{3}}log_{2}n)$,可以通过

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 #define N 40000005
     4 #define ull unsigned long long
     5 int t,vis[N],p[N];
     6 ull n,ans,phi[N];
     7 map<ull,ull>mat;
     8 ull calc(ull n){
     9     if (n<N-4)return phi[n];
    10     if (mat[n])return mat[n];
    11     ull ans;
    12     if (n&1)ans=(n+1)/2*n;
    13     else ans=n/2*(n+1);
    14     for(ull i=2,j;i<=n;i=j+1){
    15         j=n/(n/i);
    16         ans-=(j-i+1)*calc(n/i);
    17     }
    18     return mat[n]=ans;
    19 }
    20 int main(){
    21     phi[1]=1;
    22     for(int i=2;i<N-4;i++){
    23         if (!vis[i]){
    24             p[++p[0]]=i;
    25             phi[i]=i-1;
    26         }
    27         for(int j=1;(j<=p[0])&&(i*p[j]<N-4);j++){
    28             vis[i*p[j]]=1;
    29             if (i%p[j])phi[i*p[j]]=phi[i]*phi[p[j]];
    30             else{
    31                 phi[i*p[j]]=phi[i]*p[j];
    32                 break;
    33             } 
    34         }
    35     }
    36     for(int i=2;i<N-4;i++)phi[i]=phi[i]+phi[i-1];
    37     scanf("%d",&t);
    38     while (t--){
    39         scanf("%llu",&n);
    40         ans=0;
    41         while (n>1){
    42             ans+=calc(n);
    43             n/=2;
    44         }
    45         printf("%llu
    ",ans);
    46     }
    47 }
    View Code
  • 相关阅读:
    js类型转换的坑
    JS自动填写分号导致的坑
    tomcat+javaWeb+spring的一个都市供求管理系统
    java学习笔记--java中的基本数组[5]
    mysql基础语法及拓展到web中的sql注入
    angular指令大全
    在chrome下-webkit-box布局的一个bug
    use redis instance in docker hub
    centos yum install oracle java
    认识Debian
  • 原文地址:https://www.cnblogs.com/PYWBKTDA/p/13852734.html
Copyright © 2011-2022 走看看