`
huyifan951124
  • 浏览: 83202 次
社区版块
存档分类
最新评论

hihocoder1388 NTT算法

 
阅读更多

题目大意:就是让你求出满足所给式子的值是多少。

算法思路:其实我们可以将这个式子化简一下,化简成为sum(a[i]*a[i] ,i=0....n-1)+sum(b[i]*b[i] ,i=0...n-1)-2*max(sum(a[i]*b[j]),i=0...n-1,j=0...n-1)。

#include <iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define MAXN 300000
typedef long long LL;
const long long P=50000000001507329LL;
const int G=3;

LL mul(LL x,LL y){
	return (x*y-(LL)(x/(long double)P*y+1e-3)*P+P)%P;
}
LL qpow(LL x,LL k,LL p){
	LL ret=1;
	while(k){
		if(k&1) ret=mul(ret,x);
		k>>=1;
		x=mul(x,x);
	}
	return ret;
}

LL wn[25];
void getwn(){
	for(int i=1; i<=18; ++i){
		int t=1<<i;
		wn[i]=qpow(G,(P-1)/t,P);
	}
}

int len;
void NTT(LL y[],int op){
	for(int i=1,j=len>>1,k; i<len-1; ++i){
		if(i<j) swap(y[i],y[j]);
		k=len>>1;
		while(j>=k){
			j-=k;
			k>>=1;
		}
		if(j<k) j+=k;
	}
	int id=0;
	for(int h=2; h<=len; h<<=1) {
		++id;
		for(int i=0; i<len; i+=h){
			LL w=1;
			for(int j=i; j<i+(h>>1); ++j){
				LL u=y[j],t=mul(y[j+h/2],w);
				y[j]=u+t;
				if(y[j]>=P) y[j]-=P;
				y[j+h/2]=u-t+P;
				if(y[j+h/2]>=P) y[j+h/2]-=P;
				w=mul(w,wn[id]);
			}
		}
    }
    if(op==-1){
		for(int i=1; i<len/2; ++i) swap(y[i],y[len-i]);
		LL inv=qpow(len,P-2,P);
		for(int i=0; i<len; ++i) y[i]=mul(y[i],inv);
    }
}
void Convolution(LL A[],LL B[],int n){
	for(len=1; len<(n<<1); len<<=1);
	for(int i=n; i<len; ++i){
		A[i]=B[i]=0;
	}

	NTT(A,1); NTT(B,1);
	for(int i=0; i<len; ++i){
		A[i]=mul(A[i],B[i]);
	}
	NTT(A,-1);
}
int t,nn,m;
LL a[MAXN],b[MAXN];
LL ans,MAX;
int main()
{

	getwn();
	scanf("%d",&t);

	while(t--)
	{

		MAX=0;

		ans=0;

		scanf("%d",&nn);

		for(int i=0;i<nn;i++)
		{
			scanf("%lld",&a[i]);
			ans+=a[i]*a[i];
		}

		for(int i=0;i<nn;i++)
		{
			scanf("%lld",&b[nn-i-1]);
			ans+=b[nn-i-1]*b[nn-i-1];
		}

		for(int i=0;i<nn;i++)
		{
			a[i+nn]=a[i];
			b[i+nn]=0;
		}

		Convolution(a,b,2*nn);

		for(int i=nn;i<2*nn;i++)
		{
            MAX=max(MAX,a[i]);
		}

		printf("%lld\n",ans-2*MAX);

	}


    return 0;
}

 

0
1
分享到:
评论

相关推荐

    基于FPGA的有限域NTT算法设计与实现.pdf

    根据提供的文件内容,本文将介绍基于FPGA的有限域NTT算法设计与实现的相关知识点。 首先,NTT(Number Theoretic Transform)算法是一种在有限域上执行快速傅里叶变换(FFT)的技术。在公钥加密系统中,大数乘法是...

    david harvey NTT

    朴素的NTT算法复杂度为O(N^2),即涉及F_p中的环操作次数。而快速傅里叶变换(FFT)的复杂度降低为O(N log N)。NTT在以下应用中扮演重要角色: - F_p[X]中的快速多项式乘法 - 利用中国剩余定理在Z[X]、(Z/nZ)[X]、F...

    NTT.rar_NTT_NTT c++_NTT%20c%2B%2B_nttc++_快速数论变换

    快速数论变换(Fast Number Theoretic Transform, NTT)是一种在数论背景下进行的高效算法,主要用于在有限域上进行大规模的线性运算,如乘法、卷积等。与快速傅里叶变换(FFT)类似,NTT在计算速度上具有显著优势,...

    任意模数NTT的代码

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

    NTT视频编码版开发资料

    ### NTT 视频编码板概述 NTT视频编码板是一款专为标清视频编码设计的硬件设备,它主要用于实现视频信号的压缩处理,以便于传输或存储。此款编码板采用的是MPEG-2编码标准,这意味着它能够支持符合MPEG-2标准的视频...

    算法知识LC模板.pdf

    4. 数值计算:包括Simpson积分、快速傅立叶变换(FFT)、离散傅立叶变换(NTT)以及拉格朗日插值等。 5. 字符串处理:KMP算法、扩展KMP、Manacher算法、AC自动机和后缀数组(SA)是处理字符串问题的强大工具。后缀...

    NTT5大关键技术.docx

    ### NTT五大关键技术详解 #### 一、AI技术“corevo®” **1.1 Agent-AI** Agent-AI是一种能够理解和响应人类意图与情绪的人工智能技术,它旨在通过高度对话来支持人们的日常生活。这一技术的核心在于: - **听取...

    ntt:数论变换(NTT)

    数论变换(Number Theoretic Transform,简称NTT)是一种在数论背景下,与快速傅里叶变换(FFT)类似的算法。它在处理模数下的多项式乘法时展现出高效性,尤其在密码学、编码理论和计算数论等领域有广泛应用。在Java...

    抗量子格密码体制的快速数论变换算法研究综述.docx

    在这些体制中,快速数论变换(Number Theoretic Transform, NTT)算法起着至关重要的作用,尤其是在多项式乘法运算方面。 #### 二、格密码体制 ##### 2.1 格代数结构 格密码体制的基础是格(lattice)的概念。格...

    由数据范围反推算法复杂度以及算法内容

    - **适用算法**: 高精度加减法、FFT/NTT等。 - **解释**: 这类算法无论数据量多大,执行时间基本保持不变。例如,在处理高精度计算时,虽然数字可能非常大,但算法本身的操作是固定的,因此时间复杂度为O(1)。 2....

    17大林算法控制器的设计.ppt

    0 ( ) 1 s Be Ws NTT τ τ − = + 数字控制器的传递函数: 00 / (1) 1 (1) ( ) 1 1 T T TN B T Y z e ze W z R z τ τ − − − = + 闭环系统的传递函数: 00 / (1) 1 (1) ( ) 1 1 T T TN B T Y z e ze W z R ...

    基于Misty1算法的加密软件(JAVA)的实现(源代码+论文).zip

    Misty1算法是日本电子通信研究所(Nippon Telegraph and Telephone Corporation, NTT)于1997年提出的一种8轮非线性反馈移位寄存器(NLFSR)结构的分组密码。它的设计理念是结合线性和非线性特性,通过大量的异或...

    NTT HC-1000网络摄像头的录像截图软件和机械故障排除

    NTT HC-1000网络摄像头是一款专为远程监控和视频通信设计的设备,它提供了录像和截图功能,使得用户能够记录并保存重要的视频片段和图像。在使用这款摄像头时,可能会遇到各种问题,包括声音无法开启、无法自动录像...

    数论变换:此代码用于求一个序列的NTT-matlab开发

    数论变换(Number-Theoretic Transform,NTT)是一种在数论背景下类似于快速傅里叶变换(Fast Fourier Transform,FFT)的算法。在数学和计算机科学中,NTT主要用于高效地处理模数上的多项式乘法。这个特定的代码是...

    NTT-2020年全球威胁-报报告(英文)-2020.8-73页精品报告2020.pdf

    《2020年全球威胁情报报告》是NTT公司发布的有关当前网络安全威胁及趋势的专业报告。该报告重点分析了网络安全的现状,尤其是在新冠疫情期间全球商业环境的变化,并提出了相应的安全建议。以下是根据文档内容提取的...

    论文研究-Montgomery模乘算法的改进及其应用.pdf

    Montgomery算法是目前最适合于通用处理器软件实现的大整数模乘算法。1996年,Koc总结了该算法的五种实现方法:SOS、CIOS、FIOS、FIPS和CIHS,并指出CIOS方法综合性能较优。首先深入分析了FIOS实现方法,并通过消除...

    NTT HC-1000网络摄像头的固件01.02.0001-00.05.0068

    NTT HC-1000网络摄像头的固件01.02.0001-00.05.0068

    创造价值 华硕服务器台湾NTT公司应用案例

    台湾恩悌悌,作为NTT Communications在台湾的直属分公司,其业务主要依赖于日本NTT的IP网络骨干,提供电信服务和解决方案。因此,公司在服务器的销售和服务方面具有丰富的经验。在服务日商的过程中,台湾恩悌悌发现...

    后量子密码CRYSTALS-Kyber的FPGA多路并行优化实现.docx

    通过对NTT、INTT以及CWM算法流程的深入分析和优化设计,有效地提高了算法的计算效率和硬件资源利用率。这一研究成果不仅为CRYSTALS-Kyber算法的实际应用提供了有力支持,也为后量子密码领域的发展贡献了一份力量。

Global site tag (gtag.js) - Google Analytics