欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

【杭电多校2020】第五场1001.Tetrahedron

程序员文章站 2022-05-01 19:17:43
题目链接思路:首先预处理从一到n的所有倒数的平方和,分数取模用到逆元,注意预处理逆元时i*i要取模,不然会超出mod范围。h方的倒数等于abc方倒数的和,所以我们求期望的话从1到n的每一个数的平方的倒数都会出现,所以我们用之前预处理的从一到n的所有倒数的平方和乘上n分之一再乘上3(有三个数),再模mod即可。代码:#include#define int long long#define IOS ios::sync_with_stdio(false);c...

题目链接

思路:

首先预处理从一到n的所有倒数的平方和,分数取模用到逆元,注意预处理逆元时i*i要取模,不然会超出mod范围。
h方的倒数等于abc方倒数的和,所以我们求期望的话从1到n的每一个数的平方的倒数都会出现,所以我们用之前预处理的从一到n的所有倒数的平方和乘上n分之一再乘上3(有三个数),再模mod即可。

代码:

#include<bits/stdc++.h> #define int long long #define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); const int N=6e6+10; const int M=2e4+5; const double eps=1e-8; const int mod=998244353; const int inf=0x7fffffff; const double pi=3.1415926; using namespace std; int j[N]; int qpow(int a,int b) { int res=1; while(b) { if(b&1) res=res*a%mod; a=a*a%mod; b>>=1; } return res; } void init() { j[1]=1; for(int i=2;i<N;i++) { j[i]=(j[i-1]+qpow((i*i)%mod,mod-2))%mod; } } signed main() { IOS; int t; cin>>t; init(); while(t--) { int n; cin>>n; int res=(j[n]*qpow(n,mod-2)%mod)*3%mod; cout<<res<<endl; } return 0; } 

本文地址:https://blog.csdn.net/ACkingdom/article/details/107798073

相关标签: 思维