求助:我对这道题的解法是否正确
查看原帖
求助:我对这道题的解法是否正确
684254
Rain_chr楼主2023/2/1 11:52

我是先将指数和值分离开来,因为指数取模的是模数的欧拉函数,值取模的是模数,计算时再分别计算。不知有没有问题?

核心代码如下(线段树的updata)

void updata(int x,int l,int r,int L,int R)
{
	if(book[x]>times)
		return ;
	if(l==r)
	{
		if(more[l])
		{
			tree[x]=ksm(c,a[l]+euler,p);
			a[l]=ksm(c,a[l]+euler,euler);	
		}
		else
		{
			tree[x]=ksm(c,a[l],p);
			if(pow(c,a[l])>=euler)
			{
				a[l]=ksm(c,a[l],euler);	
				more[l]=1;
			}
			else
				a[l]=pow(c,a[l]);
		}
		book[x]++;
	}
	else
	{
		if(L<=l&&r<=R)
			book[x]++;
		int mid=(l+r)>>1;
		if(L<=mid)
			updata(x<<1,l,mid,L,R);
		if(mid+1<=R)
			updata(x<<1|1,mid+1,r,L,R);
		pushup(x);
	}
}

其中a是指数,tree是值

目前能够拿到65分

2023/2/1 11:52
加载中...