[BZOJ3288]Mato矩阵

来源:互联网 发布:绿色傲剑屠龙刀数据 编辑:程序博客网 时间:2024/05/06 07:09

矩阵行列式变换+高斯消元后得到对角行列式,结果就是对角行列式的对角线的积

留坑

代码:

/*One Night Of The Hunters*/#include<cstdio>#include<cstdlib>#include<iostream>#include<cstring>#include<algorithm>#include<queue>#include<iomanip>#include<stack>#include<map>#include<set>#include<cmath>#define debug(x) cerr<<#x<<"="<<x<<endl#define INF 0x7f7f7f7f#define llINF 0x7fffffffffusing namespace std;typedef pair<int,int> pii;typedef long long ll;inline int init(){int now=0,ju=1;char c;bool flag=false;while(1){c=getchar();if(c=='-')ju=-1;else if(c>='0'&&c<='9'){now=now*10+c-'0';flag=true;}else if(flag)return now*ju;}}inline long long llinit(){long long now=0,ju=1;char c;bool flag=false;while(1){c=getchar();if(c=='-')ju=-1;else if(c>='0'&&c<='9'){now=now*10+c-'0';flag=true;}else if(flag)return now*ju;}}ll phi[1000001];int cnt=0;int mod=1000000007;bool isprime[1000001];int prime[1000001];int n;void euler(int n){memset(isprime,true,sizeof(isprime));for(int i=2;i<=n;i++){if(isprime[i]){phi[i]=i-1;prime[++cnt]=i;}for(int j=1;j<=cnt&&prime[j]*i<=n;j++){isprime[prime[j]*i]=false;if(i%prime[j]==0){phi[i*prime[j]]=phi[i]*prime[j];break;}else phi[i*prime[j]]=phi[i]*(prime[j]-1);}}}int main(){ll ans=1;n=init();euler(n);for(int i=2;i<=n;i++){ans*=phi[i];ans%=mod;}printf("%lld\n",ans);return 0;}/*srO xudyh davidlee1999WTK linkct1999 Orzcompiler TDM-GCC 5.9.2*/


0 0
原创粉丝点击