筛选法+求一个整数的分解+快速模幂运算+递归求计算1+p+p^2+````+p^nPOJ 1845 Sumdiv求A^B的所有约数之和%9901 */#include<stdio.h>#include<math.h>#include<iostream>#include<algorithm>#include<string.h>using namespace std;#define MOD 9901const int MAXN=10000;int p…
一.取模运算 取模(取余)运算法则: 1. (a+b)%p=(a%p+b%p)%p; 2.(a-b)%p=(a%p-b%p)%p; 3.(a*b)%p=(a%p * b%p)%p; 4.(a^b)%p=(   (a%p)^b  )%p; 5. (  (a+b)%p+c  )%p=( a+(b+c)%p  )%p; 6.( a*(b*c)%p )%p =( c*(a*b)%p )%p; 7.( (a+b)%p*c )%p= ( (a*c)%p + (b*c)%p )%p; 几条重要性质: 1.a≡…
M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 3087    Accepted Submission(s): 953 Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a,…
传送门:http://poj.org/problem?id=1845 大致题意: 求A^B的所有约数(即因子)之和,并对其取模 9901再输出. 解题基础: 1) 整数的唯一分解定理: 任意正整数都有且只有一种方式写出其素因子的乘积表达式. ,其中为素数 2) 约数和公式: 对于已经分解的整数,A的所有因子之和为 3) 同余模公式: (a+b)%m=(a%m+b%m)%m (a*b)%m=(a%m*b%m)%m 1: 对A进行素因子分解 这里如果先进行筛50000内的素数会爆空间,只能用最朴素的…
当我们拆分完数据以后, A^B的所有约数之和为: sum = [1+p1+p1^2+...+p1^(a1*B)] * [1+p2+p2^2+...+p2^(a2*B)] *...*[1+pn+pn^2+...+pn^(an*B)]. 当时面对等比数列的时候,想到了求和公式,因为直接算超时了,但是带膜除法不能直接除,所以又想到了乘法逆元,但是逆元的使用条件是除数和mod互质的时候,题目给我们的膜不够大,然后我就方了,不知道该怎么去处理了,后来看到网上,才学会了等比快速求和的方法. 它的思想是二分法…
题目链接: https://cn.vjudge.net/problem/POJ-1845 题目大意: 求AB的因子和 解题思路: 先将A质因数分解,然后B次方的质因数指数就是乘上B即可 这里要mod9901,但是有除法,而且不一定有逆元,所以用公式: a/b mod m 等价于 a mod (m * b) / b 所以直接求出这个即可 但是mod m*b 这个数字可能很大,就算模上之后再相乘也会溢出,所以应该用有快速加法的快速幂 #include<iostream> #include<c…
题目链接:Sumdiv 题意:给定两个自然数A,B,定义S为A^B所有的自然因子的和,求出S mod 9901的值. 题解:了解下以下知识点   1.整数的唯一分解定理 任意正整数都有且只有唯一的方式写出其质因子的乘积表达式 $A={p_1}^{k_1}*{p_2}^{k_2}*{p_3}^{k_3}*...*{p_n}^{k_n}$ 2.整数因数个数 $B=(k_1+1)*(k_2+1)*(k_3+1)...*(k_n+1)$ 3.整数因数总和 $S=(1+p_1+p_1^2+p_1^3+..…
快速幂+等比数列求和.... Sumdiv Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 12599 Accepted: 3057 Description Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S modulo 9901 (the rest of the division…
题意:求A^B的所有因子之和 很容易知道,先把分解得到,那么得到,那么 的所有因子和的表达式如下 第一种做法是分治求等比数列的和  用递归二分求等比数列1+pi+pi^2+pi^3+...+pi^n: (1)若n为奇数,一共有偶数项,则:      1 + p + p^2 + p^3 +...+ p^n = (1+p^(n/2+1)) + p * (1+p^(n/2+1)) +...+ p^(n/2) * (1+p^(n/2+1))      = (1 + p + p^2 +...+ p^(n/…
题意:给你a,b,要求给出a^b的因子和取模9901的结果. 思路:求因子和的方法:任意A = p1^a1 * p2^a2 ....pn^an,则因子和为sum =(1 + p1 + p1^2 + ... . + p1^a1)*(1 + p2 + p2^2 + ... . + p2^a2)*(1 + pn + pn^2 + .... + pn^an).又由等比数列求和公式可知 1 + pn + pn^2 + .... + pn^an =(pn^an - 1)/(pn - 1).因为要mod 99…
题目链接 Sumdiv Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 25841   Accepted: 6382 Description Consider two natural numbers A and B. Let S be the sum of all natural divisors of A^B. Determine S modulo 9901 (the rest of the division of S…
题意: 给出数字A和B,要求AB的所有因子(包括AB和1)之和 mod 9901 的结果. 思路: 即使知道公式也得推算一阵子. 很容易知道,先把分解得到,那么得到,那么的所有因子之和的表达式如下: 我们要做的就是计算出sum%9901的结果. 有两种方法: (1)直接用快速幂计算对上面sum的第一步推算求结果,在计算过程中顺便取模. (2)可以根据以下这条公式对上面sum的第二步推算求结果: 也是需要用到快速幂,过程也稍微复杂了些.注意 mb 可能会超过int. 以下是第二种方法的代码: //…
a^b Time Limit: 1000MS   Memory Limit: 65535KB   64bit IO Format: Description 求a的b次方,取模mod(1<=a,b,mod<=1e18) Input 多组输入,每组数据一行,3个正整数,分别为a,b,mod Output 每组数据输出一行,为答案  Sample Input 2 10 10000000 5 100 1 0 2 37 Sample Output 1024 0 0 //模版题,主要是考虑到1e18的巨大…
2326: [HNOI2011]数学作业 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 1564 Solved: 910 [Submit][Status][Discuss] Description Input Output Sample Input Sample Output HINT Source 题解: 矩乘快速幂,构造矩阵: 其中k为位数,所以分段进行快速幂: 1~9:10~99:100~999:-. 开始4A6W,然后加了快速乘AC了,但…
题目没给全,吃X了... 2875: [Noi2012]随机数生成器 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 1479 Solved: 829 [Submit][Status][Discuss] Description 栋栋最近迷上了随机算法,而随机数生成是随机算法的基础.栋栋准备使用线性同余法(Linear Congruential Method)来生成一个随机数列,这种方法需要设置四个非负整数参数m, a, c, X0,按照下面的公式生…
这道题得到了学长的助攻,其实就是一个马尔科夫链,算出一步转移矩阵进行矩阵快速幂就行了,无奈手残 这是我第一回写矩阵快速幂,写的各种毛病,等到调完了已经8点44了,交了一发,返回PE,(发现是少了换行)再想交的时候已经开始hack了 真是TMD.......,然后rejudge完了之后再HDOJ上瞬间AC,真是...狗了,只能是自己手残 手残,手残,手残(重要的事情说三遍) 思路 :(杭电官方题解,我就不班门弄斧了..QAQ) 考虑dpdp,用f_{t,x}f​t,x​​表示第tt秒在xx的概率,…
题意大致是这样的,一共要放 m 段括号序列,每一段放 n 个括号,也就是放 n*m个括号,再每一段中的 n 个位置分别有放左括号和右括号的代价,问最终摆放出合法的括号序列的最小代价是多少. 另外保证,n小于20,m小于1e7,m是整数 这个大概是我一年前多做的,当时在21组上T了,然后就放弃了,我也不记得当时怎么做的了,也不想看以前的代码. 很明显 n 个段是循环的,所以肯定每个段作为一个整体考虑.为了保证括号序列的正确性,可以认为左括号为+1,右括号为-1,则正确性即过程中前缀和始终为正,最终…
尽管快速幂与快速乘法好像扯不上什么关系,但是东西不是很多,就一起整理到这里吧 快速幂思想就是将ax看作x个a相乘,用now记录当前答案,然后将指数每次除以2,然后将当前答案平方,如果x的2进制最后一位为1的话,就将答案乘以现在的数.快速乘法类似,只是将a*x看作x个a相加. 代码 #include<cstdio> #include<iostream> using namespace std; int mi(int a,int x) { ; ;x>>=,now=now*n…
A^B mod C Given A,B,C, You should quickly calculate the result of A^B mod C. (1<=A,B,C<2^63). Input There are multiply testcases. Each testcase, there is one line contains three integers A, B and C, separated by a single space. Output For each testc…
M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的值吗? 通过简单地列出若干项 F 即可发现,某一项的值是由若干 a 和 b 相乘得到的,而他们的指数是连续的两项斐波那契数. 因此可以通过斐波那契数列的矩阵快速幂求法得到,注意需要指数的降幂公式. #include<stdio.h> #include<string.h> typedef…
描述 zzx和city在玩一款小游戏的时候,游戏中有一个宝石合成的功能,需要m个宝石才可以合成下一级的宝石(例如需要m个1级宝石才能合成2级宝石). 这时候zzx问city说“我要合成A级宝石需要多少个B级的宝石(A>B).” city说:“这数字会好大的.” zzx:“没事的,你选择一个数取余数就行了,你只要告诉我余数就好了” city:“那就对梅森素数取余好了” 但最后,由于数字过于大,city又不想手算了,于是想请你帮忙. 输入 多组数据,输入到文件结束为止 每组输入4个正数m,A,B,K…
装载自:http://www.cnblogs.com/183zyz/archive/2012/05/11/2495401.html 题目让求一个函数调用了多少次.公式比较好推.f[n] = f[n-1]*f[n-2].然后a和b系数都是呈斐波那契规律增长的.需要先保存下来指数.但是太大了.在这里不能用小费马定理.要用降幂公式取模.(A^x)%C=A^(x%phi(C)+phi(C))%C(x>=phi(C)) Phi[C]表示不大于C的数中与C互质的数的个数,可以用欧拉函数来求. 矩阵快速幂也不…
本质:二进制拆分(你说倍增我也没脾气).然后是一个配凑. 合起来就是边二进制拆分,边配凑. 快速乘(其实龟速):把乘数二进制拆分.利用乘法分配率. 用途:防止爆long long 代码: ll qk(ll x,ll y,ll mod){ ll ret=; while(y){ ) (ret+=x)%=mod; (x+=x)%=mod; y>>=; } return ret; } 如果为了卡常,可以写成这样: ll qk(ll x,ll y,ll mod){ ll ret=; x%=mod;y%=…
5152. Brute-force Algorithm EXTREME Problem code: BFALG Please click here to download a PDF version of the contest problems. The problem is problem B in the PDF. But the data limits is slightly modified: 1≤P≤1000000 in the original description, but i…
读了一下题就会很愉快的发现,这个数列是关于p的幂次的斐波那契数列,很愉快,然后就很愉快的发现可以矩阵快速幂一波,然后再一看数据范围就......然后由于上帝与集合对我的正确启示,我就发现这个东西可以用欧拉函数降一下幂,因为两个数一定互质因此不用再加一个phi(m),于是放心的乘吧宝贝!! #include <cstdlib> #include <cstring> #include <cstdio> #include <iostream> #include &…
题目: 求AB的正约数之和. 输入: A,B(0<=A,B<=5*107) 输出: 一个整数,AB的正约数之和 mod 9901. 思路: 根据正整数唯一分解定理,若一个正整数表示为:A=p1^c1 * p2^c2 * ...... pm^cm 则其正约数之和可以表示为:S=(1+p1+p1^2+......p1^c1)*(1+p2+p2^2+......p2^c2)*......(1+pm+pm^2+......pm^cm) 那么AB就可以表示为:S'=(1+p1+p1^2+......p1…
#include<cstdio> #include<string> #include<iostream> #include<vector> #include<set> #include<map> #include<math.h> #include<queue> #include<stdlib.h> #include<cstring> #include<algorithm> u…
传送门 zhx's contest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 575    Accepted Submission(s): 181 Problem Description As one of the most powerful brushes, zhx is required to give his juniors…
2751: [HAOI2012]容易题(easy) Description 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下:有一个数列A已知对于所有的A[i]都是1~n的自然数,并且知道对于一些A[i]不能取哪些值,我们定义一个数列的积为该数列所有元素的乘积,要求你求出所有可能的数列的积的和 mod 1000000007的值,是不是很简单呢?呵呵! Input 第一行三个整数n,m,k分别表示数列元素的取值范围,数列元素个数,以及已知的限制条数.接下来k…
作为史上最强的刷子之一,zhx的老师让他给学弟(mei)们出n道题.zhx认为第i道题的难度就是i.他想要让这些题目排列起来很漂亮. zhx认为一个漂亮的序列{ai}下列两个条件均需满足. 1:a1..ai是单调递减或者单调递增的. 2:ai..an是单调递减或者单调递增的. 他想你告诉他有多少种排列是漂亮的.因为答案很大,所以只需要输出答案模p之后的值. Input Multiply test cases(less than 10001000). Seek EOF as the end of…