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
    

      

  • 相关阅读:
    linux的一般命令------附加
    linux(4)----------ssh config详解
    linux(3)--------SSH工具的安装使用
    linux(2)-----新装linux配置
    linux(1)------vmvear虚拟机安装linux
    (3)hadoop单节点配置
    (2)hadoop之-----配置免密码登录
    (1)hadoop之----linux配置jdk环境
    BZOJ 1037 生日聚会(神DP)
    BZOJ 1046 上升序列(LIS变形)
  • 原文地址:https://www.cnblogs.com/yangjiyuan/p/5502861.html
Copyright © 2011-2022 走看看