首页 > 其他分享 >Poj1845 & 洛谷P1593 寄中寄

Poj1845 & 洛谷P1593 寄中寄

时间:2024-04-07 09:03:40浏览次数:23  
标签:寄中 洛谷 int long times cdots modd return Poj1845

给定两个数 \(A\),\(B\),求 \(A^B\) 的因子和。

由唯一分解定理,\(A\) 可以表示成 \(p_1^{a_1}\times p_ 2^{a_2}\times p_3^{a_3}\times \cdots\times p_n^{a_n}\) 的形式。而 \(A^B\) 也就可以表示成 \(p_1^{a_1\times B}\times p_ 2^{a_2\times B}\times p_3^{a_3\times B}\times \cdots\times p_n^{a_n\times B}\)。题目中让我们求因子和,我们会因子和的公式!于是这道题的答案可以表示为 \(\left ( 1+p_1+p_1^{2}+\cdots+p_1^{a_1\times B} \right ) \times \left ( 1+p_2+p_2^{2}+\cdots+p_2^{a_2\times B} \right ) \times \cdots \left ( 1+p_n+p_n^{2}+\cdots+p_n^{a_n\times B} \right )\),考虑用等差数列求和公式来进行计算。

首先令 \(s_1=1+p^{1}+p^{2}+\cdots+p^{n}\)

然后令 \(s_2=s_1\times p=p^{1}+p^{2}+\cdots+p^{n+1}\)

那么 \(s_2-s_1=s_1\times p-s_1=s_1\times (p-1)\)

这个式子又可以表示为 \(s_2-s_1=p^{n+1}-1\)

于是 \(s_1\times (p-1)=p^{n+1}-1\)

得出结论:\(s_1=\frac{p^{n+1}-1}{p-1}\)。

于是就可以快乐地计算了。因为有除法,所以考虑使用逆元。写代码的时候一定要搞清楚逆元的逻辑关系,很容易被绕晕。

Update On 2024/3/4:小技巧!循环的时候使用 i*i<=x 而不是 i<=sqrt(x)。后者在 poj 会CE,原因是 sqrt 的返回值是 double 类型,不强制转换会出问题。第二个小经验:逆元数组不要开太大。这题数组太大会RE。

Update On 2024/3/4:这道题两个坑。

  • 取模的时候一定一定要先加取模数再取模,c++ 的取模机制会让负数取模变成负数。Hack:9901 0,输出应该是 \(1\) 而不是负数。

  • 有些数是没有逆元的,所以一定要特判 i%9901==1

贴个代码:

#include<iostream>
#include<cmath>
#define modd 9901
using namespace std;
long long Inv[500005];//5e6
long long ksm(int a,int b){
	if(b==0){
		return 1;
	}
	if(b%2==0){
		long long tmp=ksm(a,b/2)%modd;
		return (tmp*tmp)%modd;
	}
	else{
		return (a%modd*ksm(a,b-1)%modd)%modd;
	}
}
inline long long mod(int a,int b){
	return (a%b+b)%b;
}
inline long long inv(long long a,long long b){
	if(Inv[a]){
		return Inv[a];
	}
	Inv[a]=mod(-b/a*inv(b%a,b),b);
	return Inv[a];
}
bool Is_Prime(int x){
	if(x==2){
		return 1;
	}
	if(x==1){
		return 0;
	}
	for(int i=2;i<=sqrt((double)x);i++){
		if(x%i==0){
			return 0;
		}
	}
	return 1;
}
inline long long get(long long &n,long long k){
	long long x=n,cnt=0;
	while(n%k==0){
		n/=k;
		cnt++;
	}
	return cnt;
}
long long a,b;
signed main(){
	cin>>a>>b;
	Inv[1]=1;
	long long ovovovovo=1;
	for(int i=2;i*i<=a;i++){
		if(a%i==0){
			long long _=get(a,i);
			if(i%9901==1){
				ovovovovo=ovovovovo*(_*b+1)%modd;
				ovovovovo%=modd;
				continue;
			}
			ovovovovo=ovovovovo*(ksm(i,b*_+1)-1);
			ovovovovo=mod(ovovovovo,modd);
			ovovovovo=ovovovovo*inv((i-1)%modd,modd);
			ovovovovo=mod(ovovovovo,modd);
		}
	}
	if(a>1){
		if(a%9901==1){
			ovovovovo=ovovovovo*(b+1)%modd;
			ovovovovo%=modd;
			cout<<ovovovovo<<endl;
			return 0;
		}
		ovovovovo=ovovovovo*(ksm(a,b+1)-1);
		ovovovovo=mod(ovovovovo,modd);
		ovovovovo=ovovovovo*inv((a-1)%modd,modd);
		ovovovovo=mod(ovovovovo,modd);
	}
	cout<<ovovovovo<<endl;
	return 0;
}

总结:gxyzoj 数据弱的一批。

标签:寄中,洛谷,int,long,times,cdots,modd,return,Poj1845
From: https://www.cnblogs.com/zxcqwq/p/18118310

相关文章

  • 洛谷题单指南-图的基本应用-P1983 [NOIP2013 普及组] 车站分级
    原题链接:https://www.luogu.com.cn/problem/P1983题意解读:由于“如果这趟车次停靠了火车站x,则始发站、终点站之间所有级别大于等于火车站x的都必须停靠”。因此,在始发站和终点站之间,能停靠的车站都是级别较高的,没有停靠的车站都是级别较低的,计算最少有多少个不同级别。解题思路:......
  • 美化洛谷
    氩洛谷(使用Egde浏览器)下载后解压,然后点击浏览器右上角的三个点->“扩展”->“管理扩展”。将开发人员模式打开,把刚刚解压的文件拖上去。打开洛谷,点击“扩展”->“Stylus”->“管理样式”,把“作为UserCSS”打开,然后“新建样式”,复制下面的代码。/*==UserStyle==@name......
  • 倍增(LCA与ST表)附详细讲解博客路劲以及洛谷模板题
    前置知识--倍增倍增算法,顾名思义,就是不断地翻倍。虽然是一种基础算法,但它能够使得线性的处理转化为对数级的处理,大大地优化时间复杂度,在很多算法中都有应用,其中最常见的就是ST表以及LCA(树上最近公共祖先)了。学习博客:算法学习笔记(12):ST表-知乎(zhihu.com)for(intx=......
  • 【题单】 洛谷图论题单
    这里写目录标题updata普及-普及/提高-普及+/提高提高+/省选-省选/NOI−NOI/NOI+/CTSCupdata2024.03.31发布此文章普及-P1359租用游艇P1636Einstein学画画(数据有误)P1700[USACO19OPEN]MilkFactoryBB3613图的存储与出边的排序B3643图的存储B3644【模......
  • 八皇后问题(洛谷P1219)
    在做洛谷上的题前我们看一下这样一道题题目描述会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。如何将8个皇后放在棋盘上(有8 × 8个方格),使它们谁也不能被吃掉!这就是著名的八皇后问题。对于某个满足要求的8皇后的摆放方法,定义一个皇后串a与之对......
  • 洛谷P1000超级玛丽游戏C++
    题目描述超级玛丽是一个非常经典的游戏。请你用字符画的形式输出超级玛丽中的一个场景。********************####....#.#..###.....##....###.......############......
  • 【题单】 往届 CSP/s 题目(洛谷)
    这里写目录标题updata20232022202120202019updata2023P9752[CSP-S2023]密码锁P9753[CSP-S2023]消消乐P9754[CSP-S2023]结构体P9755[CSP-S2023]种树2022P8817[CSP-S2022]假期计划P8818[CSP-S2022]策略游戏P8819[CSP-S2022]星战P8820[......
  • 洛谷 P1006 [NOIP2008 提高组] 传纸条
    题意:传纸条,跟方格取数一样,但是两条路径不能有重复的。思路:还是一样的走,但是x1跟x2不能相等,包括现在跟上一个状态。总结:看了题解,发现题解大多数都是逻辑不正确的,更有离谱的是数组范围都不加特判,数组访问越界但是可以ac的情况,数据太烂了,放个自以为正确的思路吧,发现之前自己提交的......
  • 洛谷p1002题解
    [NOIP2002普及组]过河卒题目描述棋盘上AAA点有一个过河卒,需要走到目标BB......
  • 洛谷p1002(过河卒)
    题目描述 如图,A点有一个过河卒,需要走到目标B点。卒行走规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如下图C点上的马可以控制9个点(图中的P1,P2…P8和C)。卒不能通过对方马的控......