zoukankan      html  css  js  c++  java
  • 【bzoj3288】Mato矩阵

    题目大意:给定一个n阶行列式,第i行第j列为GCD(i,j),求这个行列式的值

    高斯消元之后发现对角线上的东西是phi

    于是线性筛出所有的欧拉函数即可

     1 #include<algorithm>
     2 #include<iostream>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<cstdio>
     6 #include<cmath>
     7 #include<queue>
     8 using namespace std;
     9 
    10 typedef long long LL;
    11 
    12 #define MOD 1000000007
    13 #define N 1000010
    14 
    15 int n;
    16 int cnt;
    17 LL ans=1;
    18 
    19 LL phi[N];
    20 int prime[N];
    21 
    22 bool vis[N];
    23 
    24 void init()
    25 {
    26     phi[1]=1;
    27     for (int i=2;i<=n;i++)
    28     {
    29         if (!vis[i])
    30             prime[++cnt]=i,phi[i]=i-1;
    31         for (int j=1;prime[j]*i<=n;j++)
    32         {
    33             vis[prime[j]*i]=true;
    34             if (i%prime[j]==0)
    35             {
    36                 phi[prime[j]*i]=phi[i]*prime[j];
    37                 break;
    38             }
    39             phi[prime[j]*i]=phi[i]*(prime[j]-1);
    40         }
    41     }
    42 }
    43 
    44 int main()
    45 {
    46     scanf("%d",&n);
    47     init();
    48     for (int i=1;i<=n;i++)
    49         ans=ans*phi[i]%MOD;
    50     printf("%lld",ans);
    51     return 0;
    52 }

    一开始看题表示不会矩阵的行列式的值,于是搜了一下,发现求起来比较复杂。于是继续翻,发现一种可以这样搞

    这里有一个ppt

    http://wenku.baidu.com/link?url=fhxojDfArV5O6LtsJhOeS0l9za3jv58NRPciTQztWba_7X3bNw7dM3Kguxy8Qz2Okf_ohZ5rcf2QNNILrxQwtqKcAHZaQRglP6u1gYJYZ7C
    

      

  • 相关阅读:
    SDOI Day2
    SDOI Day1
    Codeforces 506E Mr. Kitayuta's Gift (矩阵乘法,动态规划)
    CEOI 2014 wall (最短路)
    BZOJ 3926: [Zjoi20150]诸神眷顾的幻想乡(后缀自动机)
    BZOJ 3925: [Zjoi2015]地震后的幻想乡(概率)
    BZOJ 3924: [Zjoi2015]幻想乡战略游戏(动态点分治)
    Nginx与Lua的开发
    Nginx访问控制
    Nginx模块
  • 原文地址:https://www.cnblogs.com/yangjiyuan/p/5502861.html
Copyright © 2011-2022 走看看