多项式相关模板#2

多项式回归:理解模型复杂度与过拟合的入门磨刀石 多项式回归是机器学习中连接线性建模与非线性拟合的基础桥梁,其本质是在线性模型框架下通过特征工程(如x²、x³等幂次扩展)实现对曲线关系的显式建模。它不改变模型对参数的线性假设,却能直观揭示‘特征升维’带来的表达能力跃迁与泛化风险。技术价值在于高度可解释、全程可调试、无需GPU即可可视化过拟合过程,成为建立机器学习直觉的理想教学载体。典型应用场景包括教学演示、baseline构建、可解释AI局部近似及传统统计建模增强。本文聚焦scikit-learn中PolynomialFeatures与LinearRegr 阅读详情

.
最近出了几个这样的题于是就把模板库完善了一下
依然是全程NTT实现,模数为998244353,依然没有多点插值和多点求值
不过这次画风大变,因为结构体化的多项式模板其实无论用什么实现方式(数组,指针,vector)都不能同时兼顾效率和灵活性两方面,所以整个代码都是用数组实现
稍微写一下一些需要注意的点:

多项式求逆

大概是基于一个思想:倍增
首先当deg(A)=1deg(A)=1deg(A)=1时我们有B=A−1=AM−2B=A^{-1}=A^{M-2}B=A−1=AM−2 注意常数项不能为0
下面考虑deg(A)>1deg(A)>1deg(A)>1
假设我们知道了A(x)∗B′(x)=1 (mod xn)A(x)*B'(x)=1\ (mod\ x^n)A(x)∗B′(x)=1 (mod xn)
现在我们要求的是A(x)∗B(x)=1 (mod x2n)A(x)*B(x)=1\ (mod\ x^{2n})A(x)∗B(x)=1 (mod x2n)
首先必然有的就是A(x)∗(B′(x)−B(x))=0 (mod xn)A(x)*(B'(x)-B(x))=0\ (mod\ x^n)A(x)∗(B′(x)−B(x))=0 (mod xn)
那么就有B′(x)−B(x)=0 (mod xn)B'(x)-B(x)=0\ (mod\ x^n)B′(x)−B(x)=0 (mod xn)
两边平方就是B2−2BB′+B′2=0 (mod x2n)B^2-2BB'+B'^2=0\ (mod\ x^{2n})B2−2BB′+B′2=0 (mod x2n)上面这一步非常关键
接下来用前面的结论AB′=1AB'=1AB′=1就得到
B−2B′+AB′2=0 (mod x2n)B-2B'+AB'^2=0\ (mod\ x^{2n})B−2B′+AB′2=0 (mod x2n)
那么我们就求得了B(x)=2B′−AB′2B(x)=2B'-AB'^2B(x)=2B′−AB′2
写的时候直接把次数取到2的幂次会比较方便


多项式求Ln

一个非常好的问题
首先定义?就是 Ln(A)的泰勒展开而已
这个时候就会发现一些问题
如果A的常数项不为1那么我们发现 ln(A)\ ln(A) ln(A)是不能在模意义下表示的
所以我们这里只讨论常数项为1的情况(不为1请用FFT而不是NTT)
注意到以下的式子d(ln(A))=dAAd(ln(A))=\frac{dA}{A}d(ln(A))=AdA​
这给我们求ln提供了方法,先对A求导,乘上A的逆元让后积分就可以了
积分常数C一般取0
这个还是比较好理解的


多项式Exp

这个就不那么好解释了
先给一个牛顿迭代的式子
如果有式子FFF满足G(F(x))=0 (mod xn)G(F(x))=0\ (mod\ x^n)G(F(x))=0 (mod xn)
那么我们就得到H(x)=F(x)−G(F(x))/G′(F(x))H(x)=F(x)-G(F(x))/G'(F(x))H(x)=F(x)−G(F(x))/G′(F(x))这个H满足G(H(x))=0 (mod x2n)G(H(x))=0\ (mod\ x^{2n})G(H(x))=0 (mod x2n)
我们现在要求的是ln(F(x))−A(x)=0 (mod xn)ln(F(x))-A(x)=0\ (mod\ x^n)ln(F(x))−A(x)=0 (mod xn)
设G(F(x))=ln(F(x))−A(x)G(F(x))=ln(F(x))-A(x)G(F(x))=ln(F(x))−A(x)带入上面那个式子就得到
H(x)=F(x)⋅(1−ln(F(x))+A(x)H(x)=F(x)·(1-ln(F(x))+A(x)H(x)=F(x)⋅(1−ln(F(x))+A(x)
这样,套用上面求逆的倍增法就可以了
同样注意,只有当常数项为0的时候这个算法才能使用否则请用FFT


多项式开方

依然是沿用上面的倍增方法
我们考虑已经得到B′2=A (mod xn)B'^2=A\ (mod\ x^n)B′2=A (mod xn)
那么就得到(B+B′)∗(B−B′)=0 (mod xn)(B+B')*(B-B')=0\ (mod\ x^n)(B+B′)∗(B−B′)=0 (mod xn)
取一个解就得到B−B′=0 (mod xn)B-B'=0\ (mod\ x^n)B−B′=0 (mod xn)
平方一下就得到B2−2BB′+B′2=0 (mod x2n)B^2-2BB'+B'^2=0 \ (mod\ x^{2n})B2−2BB′+B′2=0 (mod x2n)
又因为我们已知B2=AB^2=AB2=A
所以就有B(x)=A(x)+B′2(x)2B′(x)B(x)=\frac{A(x)+B'^2(x)}{2B'(x)}B(x)=2B′(x)A(x)+B′2(x)​
套用上面的多项式求逆就可以了

除法这里暂时不写(代码里面有)

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 400010
#define M 998244353
#define LL long long
using namespace std;
int W[N],iW[N],inv[N];
int rA[N],rB[N],C[N],b[N],iA[N],iB[N],dA[N];
inline LL pow(LL x,LL k,LL s=1){
	for(;k;x=x*x%M,k>>=1) k&1?s=s*x%M:0;
	return s;
}
inline void init(){
	inv[1]=1;
	for(int j=2;j<N;++j)
		inv[j]=(LL)(M-M/j)*inv[M%j]%M;
	for(int j=1;j<=N;j<<=1){
		W[j]=pow(3,(M-1)/j);
		iW[j]=pow(W[j],M-2);
	}
}
inline void NTT(int* A,int n,int g){
	static int b[N]; memcpy(b,A,n<<2);
	for(int i=0,j=0;i<n;i++){
        if(i>j) swap(b[i],b[j]);
        for(int l=n>>1;(j^=l)<l;l>>=1);
    }
	for(int k=1;k<n;k<<=1){
		register LL w=g?W[k<<1]:iW[k<<1],u,v,z=1;
		for(int j=k;j<n;++j&k?z=z*w%M:z=1,j|=k){
			u=b[j^k]; v=z*b[j]%M;
			b[j^k]=(u+v)%M; b[j]=(u-v+M)%M;
		}
	}
	if(!g){
		g=inv[n];
		for(int i=0;i<n;++i) A[i]=(LL)b[i]*g%M;
	} else memcpy(A,b,n<<2);
}
inline void gInv(int* A,int* B,int n){
	if(n==1){ *B=pow(*A,M-2); return; }
	gInv(A,B,n>>1);
	for(int i=0;i<n;++i) C[i]=A[i],C[i+n]=0;
	NTT(C,n<<1,1);
	NTT(B,n<<1,1);
	for(int i=0;i<(n<<1);++i) C[i]=B[i]*(M+2-(LL)C[i]*B[i]%M)%M;
	NTT(C,n<<1,0);
	for(int i=0;i<n;++i) B[i]=C[i],B[i+n]=0;
}
inline void Sqrt(int* A,int* B,int n){
	if(n==1){ *B=*A; return; }
	Sqrt(A,B,n>>1);
	for(int i=0;i<n;++i) C[i]=A[i],iB[i]=iB[i+n]=C[i+n]=0;
	gInv(B,iB,n);
	NTT(C,n<<1,1);
	NTT(iB,n<<1,1);
	for(int i=0;i<(n<<1);++i) C[i]=(LL)C[i]*inv[2]%M*iB[i]%M;
	NTT(C,n<<1,0);
	for(int i=0;i<n;++i) B[i]=((LL)B[i]*inv[2]%M+C[i])%M;
}
inline void Div(int* A,int* B,int n,int m,int* D,int* R){
	for(int i=0;i<m;++i) rB[i]=B[m-i-1];
	for(int i=0;i<n;++i) rA[i]=A[n-i-1];
	int dG=n-m+1,L=1; for(;L<(dG<<1);L<<=1);
	for(int i=dG;i<L;++i) rA[i]=rB[i]=0;
	for(int i=0;i<L;++i) iB[i]=0;
	gInv(rB,iB,L);
	for(int i=dG;i<L;++i) iB[i]=0;
	NTT(iB,L,1);
	NTT(rA,L,1);
	for(int i=0;i<L;++i) rA[i]=(LL)rA[i]*iB[i]%M;
	NTT(rA,L,0);
	for(int i=0;i<dG;++i) D[i]=rA[dG-i-1];
	for(int i=0;i<dG;++i) rA[i]=D[i];
	for(int i=0;i<m;++i) rB[i]=B[i];
	for(;L<(m+dG);L<<=1);
	for(int i=dG;i<L;++i) rA[i]=0;
	for(int i=m;i<L;++i) rB[i]=0;
	NTT(rA,L,1);
	NTT(rB,L,1);
	for(int i=0;i<L;++i) rA[i]=(LL)rA[i]*rB[i]%M;
	NTT(rA,L,0);
	for(int i=0;i<L;++i) R[i]=(A[i]-rA[i]+M)%M;
}
inline void Ln(int* A,int* B,int n){
	for(int i=0;i<(n<<1);++i) iA[i]=dA[i]=0;
	gInv(A,iA,n);
	for(int i=1;i<n;++i) dA[i-1]=(LL)A[i]*i%M;
	NTT(dA,n<<1,1);
	NTT(iA,n<<1,1);
	for(int i=0;i<(n<<1);++i) dA[i]=(LL)iA[i]*dA[i]%M;
	NTT(dA,n<<1,0);
	*B=B[n]=0;
	for(int i=1;i<n;++i) B[i]=(LL)dA[i-1]*inv[i]%M,B[i+n]=0;
}
inline void Exp(int* A,int* B,int n){
	if(n==1){ *B=1; return; }
	Exp(A,B,n>>1);
	for(int i=0;i<(n<<1);++i) b[i]=0;
	Ln(B,b,n);
	for(int i=0;i<n;++i) b[i]=((LL)A[i]-b[i]+M)%M;
	*b=(*b+1)%M;
	NTT(B,n<<1,1);
	NTT(b,n<<1,1);
	for(int i=0;i<(n<<1);++i) B[i]=(LL)B[i]*b[i]%M;
	NTT(B,n<<1,0);
}
int F[N],G[N],n,H[N],m,k;	
int main(){
//	freopen("1.in","r",stdin);
	init(); scanf("%d%d",&n,&k); ++n;
	for(int i=0;i<n;++i) scanf("%d",F+i);
	for(m=1;m<n;m<<=1);
	Ln(F,G,m);
	for(int i=0;i<n;++i) G[i]=(LL)G[i]*k%M;
	memset(F,0,sizeof F);
	Exp(G,F,m);
	for(int i=0;i<n;++i) printf("%d ",F[i]);
}
点云处理实操 基于多项式重构的平滑和法线估计 阅读详情

相关推荐

MATLAB图像相关性分析程序:混沌图像加密评估

混沌理论是一门研究看似无序系统背后潜在规律的数学分支。混沌系统的动力学行为具有非周期性、不可预测性和初值敏感性等特征,这些特性使得混沌理论成为加密领域的一个强大工具。在混沌图像加密领域,常见的算法包括Logistic映射、Chebyshev多项式映射、Arnold猫映射等。这些算法各有其特点,例如,Logistic映射结构简单且易于实现,Chebyshev多项式映射在处理大型数据集时效率较高,而Arnold猫映射则因其良好的扩散性能而被广泛应用于图像加密。

weixin_42596011的博客 1093

NTT(快速数论变换)模板

NTT快速数论变换在竞赛中的模板

R的博客 2600

任意模数NTT的代码

这是任意模数NTT的代码,非常地实用。我的代码比较好理解,希望能够和大家分享。

NTT模板

【代码】NTT模板。

m0_73635984的博客 547

Windows下用VS2022编译libcurl全流程(含openssl配置避坑指南)

本文详细介绍了在Windows平台使用Visual Studio 2022编译libcurl库的完整流程,重点解决了集成OpenSSL支持HTTPS功能时的常见配置难题。从环境准备、源码获取、依赖编译到工程配置,提供了清晰的步骤和针对非默认安装路径的避坑指南,帮助开发者高效完成网络库的集成工作。

weixin_29291185的博客 245

人形机器人系列——硬件介绍

人形机器人是多领域交叉技术的产物,主要由三大系统组成:感知系统、决策系统和执行系统。感知系统感知系统是人形机器人获取外界信息的途径,主要由各种传感器组成。其中,视觉传感器用于获取图像信息,如摄像头、激光雷达等;触觉传感器用于感知触碰和压力,如力/力矩传感器、声学传感器等。这些传感器收集到的信息为机器人的决策和执行提供基础。决策系统决策系统是人形机器人的大脑,负责处理和决策各种信息。它由芯片和算法组成。芯片是硬件基础,提供计算能力;算法是软件基础,用于处理和分析传感器收集到的信息,并做出相应的决策。执行系统。

liangwqi的博客 1万+

快速数论变换模板(NTT)

快速数论变化(NTT)是的原理其实和快速傅里叶变换是一样的原理。 对于形如m= c*2^n+1的费马素数,假设其原根为g。那么瞒住g^(m-1)==1  而且正好(m-1)能整除2^n的。所所以可以在模p域进行NTT变换。旋转因子为  g^((m-1)/n)。其他的原理都和FFT的原理相同。这样可以解决特殊情况下FFT的浮点误差。 /* * Author: islands * Create

非确定有限状态自动机 4924

Day470&471.Netty概述&Netty高性能架构设计 -netty

Netty概述 一、原生 NIO 存在的问题 NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。 开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常流的处理等等。 JDK NIO

阿昌爱Java 1570

任意模数NTT(MTT)

前言 众所周知,NTT有几个经典的模数:469762049,998244353,1004535809469762049,998244353,1004535809469762049,998244353,1004535809 为什么这些模数被称为NTT模数呢?因为他们都是这样一个形式: P=2a∗X+1P=2^a*X+1P=2a∗X+1 为什么要有这样一个条件呢,因为只有这样,才能找到所需的原根 所以...

zhouyuheng2003的博客 9180

紫光同创FPGA中ADF网表文件的黑匣子封装与PDS环境实战指南

本文详细介绍了在紫光同创FPGA开发环境中使用ADF网表文件进行黑匣子封装的实战指南。通过PDS环境配置、加密ADF生成、黑匣子集成及验证调试等步骤,帮助开发者实现核心IP保护,同时保持设计性能。特别适用于需要模块级代码保护的企业级FPGA开发场景。

weixin_33725239的博客 340

基于Simulink的自适应反步法(Adaptive Backstepping)控制​

本文针对非线性系统控制中未知参数和强非线性耦合的挑战,提出基于Simulink的自适应反步法解决方案。通过融合参数在线估计与反步递归设计,该方法显著提升了永磁同步电机(PMSM)速度控制的鲁棒性,使跟踪误差从20%降至3%,参数估计收敛时间小于0.5秒。文章详细阐述了从算法推导到Simulink实现的完整流程,包括系统架构设计、核心算法推导(以PMSM为例)、模块化建模方法、参数优化策略以及工程部署建议。提供的自适应控制器MATLAB代码和关键参数表可直接应用于实际工程,为电机驱动、机械臂等非线性系统控制提

xiaoheshang_123的博客 101

多项式相关模板#1

一个模板,功能大概就是加减,乘法,求逆和除法,后面(可能)会加上exp,ln,多点求值,插值,取模 #pragma GCC optimize("O3") #pragma G++ optimize("O3") #include<stdio.h> #include<string.h> #include<algorithm> #define N 280010 #define M 998244353 #define LL long long using namespace s

Sapphire521的博客 86

21、汽车喷漆目标区域识别:机器学习与深度学习的应用

本文探讨了机器学习与深度学习在汽车喷漆目标区域识别中的应用,重点利用卷积神经网络(CNN)提高喷漆效率并减少油漆浪费。通过构建和预处理包含多种汽车类型的数据集,采用ResNet-18、ResNet-50和MobileNet-v2等模型进行训练与评估,结果表明ResNet-50在准确率和鲁棒性方面表现最佳。研究还分析了数据裁剪、标签处理、网络架构差异以及光照和遮挡对识别效果的影响,并提出了系统实现流程。最后,文章展望了多传感器融合、模型优化和场景适应性等未来研究方向,为智能化喷漆工艺提供了技术参考。

5b6n7m8的博客 101

ML-For-Beginners 回归建模作业全解:用 Scikit-learn 完成线性回归与多项式回归的构建、选型论证与精度评估

本篇围绕 ML-For-Beginners 回归课程第三课《用 Scikit-learn 构建回归模型》(2-Regression/3-Linear)配套的建模作业展开:在讲义与随堂 notebook 已展示"如何用线性回归与多项式回归建模"的基础上,指导你独立完成一份回归建模作业——寻找数据集(或使用 Scikit-learn 内置数据集)构建全新模型、在 notebook 中论证技术选型、演示

gitblog_00707的博客 340

Qwen-Image(阿里通义千问)技术浅析(一)

Qwen-Image(阿里通义千问多模态模型)是阿里巴巴推出的视觉-语言多模态大模型,能够理解图像内容并完成复杂的跨模态任务。

m0_75253143的博客 673

高云FPGA系列教程(7):ARM GPIO外部中断

高云GN1NSR-4C共有16个GPIO,每个GPIO可配置成输入或输出模式,支持中断输入,触发方式可选择:上升沿、下降沿、高电平、低电平触发。中断优先级可通过NVIC进行设置,支持 0-7 级可编程中断优先级。

whik1194的博客 1375

R语言气象数据相关性分析全流程(含代码模板与实战案例)

掌握气象数据的R语言相关性分析全流程,解决多变量气象因子关联性难题。涵盖数据清洗、可视化与Pearson/Spearman方法应用,适用于气候研究与环境预测。提供可复用代码模板与真实案例解析,操作性强,值得收藏。

DebugLoom的博客 955

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

ML-For-Beginners 回归实战:基于 Scikit-learn 构建线性回归与多项式回归模型完整指南

本篇技术指南以 ML-For-Beginners 课程第 2 部分第 3 课《Build a regression model using Scikit-learn: regression four ways》的课后作业(`translations/de/2-Regression/3-Linear/assignment.md`,其英文原版为 [2-Regression/3-Linear/assig

gitblog_00808的博客 132

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

多项式回归实战指南:从线性到非线性的可控升级

多项式回归是一种在保持线性模型求解框架前提下,通过特征变换(如x, x², x³)引入非线性表达能力的基础建模技术。其核心原理在于‘对参数线性、对特征非线性’,既复用最小二乘等成熟工具,又能显式刻画U形、S形等系统性弯曲模式。该方法技术价值突出体现在轻量可控、可解释性强、部署成本低,广泛应用于剂量响应建模、材料性能拟合、用户体验曲线分析等需平衡精度与透明度的工程场景。本文聚焦残差诊断驱动的阶数选择、标准化必要性、Pipeline防泄露实践及过拟合三重防御策略,直击工业落地中最常被忽视的关键细节。

wgyyh 497

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

时间序列数据挖掘模板: 墨尔本十年气温变化预测

1. 写在前面 时间序列数据广泛存在于量化交易, 回归预测等机器学习应用, 是最常见的数据类型。所以这里通过墨尔本十年气温变化预测的任务来整理一个时间序列数据挖掘的模板,方便以后查阅方便。这个模板可以用在大部分的时间序列预测任务,从股票价格波动,到四季气温变化, 从大桥沉降预测,到城市用电预警等。 要进行下面工作的整理: 探索性数据挖掘和数据可视化: 绘制折线图、热力图、箱型图、小提琴图、滞后图...

Miracle8070 1万+

用多项式表示量化神经网络简单性:有效度数ED的原理与PyTorch实现

在神经网络工程实践中,模型复杂度评估常依赖参数量或FLOPs,但这类静态指标难以反映函数空间的真实行为。一个参数量庞大的网络可能学到平滑低阶函数,而小网络也可能因过拟合产生高频振荡。解决这一问题的关键,是借助泰勒展开将网络映射为多项式表达,通过分析各阶系数的能量分布,定义“有效度数”(ED)来量化函数的简单性。ED越低,说明函数越光滑、抗噪与泛化能力越强,这为理解过拟合、欠拟合和模型剪枝提供了新视角。基于PyTorch,我们可从不同采样点计算高阶导数与ED,并将其作为正则项优化训练过程,从而在工程上实现模型

weixin_30851867的博客 295

五次多项式轨迹设计:面向工程师的视觉化运动规划方法

五次多项式是实现C²连续运动轨迹的核心数学工具,其六个自由度可精确约束起点/终点的位置、速度与加速度,从而满足机器人、动画、数控等系统对平滑性与物理可行性的双重要求。原理上,它通过解析求解线性边界方程组获得唯一曲线,避免数值振荡与过拟合;技术价值在于将抽象代数表达转化为可拖拽的几何控制点,显著降低工程直觉建模门槛;典型应用场景包括机械臂路径规划、镜头运镜设计、物理仿真初始化及高等数学教学可视化。本文聚焦‘Quintic’s’这一面向非程序员的交互式设计系统,深度融合曲率圆映射、实时合规校验与多维可视化反馈机

weixin_30715523的博客 435

C++数据结构堆栈应用:表达式求值 学习笔记

文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结学习内容:学习时间:学习产出: 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代码如下(示例): import nump

stre_2632的博客 1903
上一篇: FWT模板
下一篇: 伯努利数
扩展的灰
博客等级 码龄12年 60粉丝 342原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值