POJ 1845

1.整数的唯一分解定理

任何正整数都有且只有一种方式写出其素因子的乘积表达式。

A=(p1^k1)*(p2^k2)*(p3^k3)*.....*(pn^kn) p均为素数。

2.约数和公式

S=(1+p1+p1^2+.....+p1^k1)*(1+p2+p2^2+.....+p2^k2)*......*(1+pn+pn^2+pn^3+.....+pn^kn);

3.同余模公式

(a+b)%m=(a%m+b%m)%m;

(a*b)%m=(a%m+b%m)%m;

对A分解

A首先对第一个素数不断取模,A%2=0,记录2出现的次数加1,A/=2;A%2!=0,则A对下一个素数3不断取模,

特殊判定:A本身是素数时,就无法分解。

求等比数列的和

若n为奇数,一共有偶数项

1+p+p^2+.....+p^n=(1+p^(n/2+1))+p*(1+p^(n/2+1))+p^2*(1+p^(n/2+1))+.....+p^(n/2)*(1+p^(n/2+1))=(1+p+p^2+....+p^(n/2))*(1+p^(n/2+1))

若n为偶数,一共有奇数项

1+p+p^2+.....+p^n=(1+p^(n/2+1))+p*(1+p^(n/2+1))+p^2(1+p^(n/2+1))+.....+p^(n/2-1)*(1+p^(n/2+1))+p^(n/2)=(1+p+p^2+.....+p^(n/2-1))*(1+p^(n/2+1)+p^(n/2);

long long sum(long long p,long long n)
{
	if(n==0) return 1;
	if(n%2) return (sum(p,n/2)*(1+power(p,n/2+1)))%mod;
	else return (sum(p,n/2-1)*(1+power(p,n/2+1))+power(p,n/2))%mod; 
}

反复平方法计算幂次式

此方法只需要o(log2n)即可求幂。

将n化为二进制,若数位上是一,sq=(sq*p)%mod;

long long power(long long p,long long n)
{
	long long sq=1;
	while(n)
	{
		if(n&1) sq=(sq*p)%mod;
		n>>=1;
	    p=p*p%mod;
	}
	return sq;
}

本题代码如下:

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
const int mod=9901;
int A,B,p[10005],n[10005];
bool vis[10005];
long long power(long long p,long long n)
{
	long long sq=1;
	while(n)
	{
		if(n&1) sq=(sq*p)%mod;
		n>>=1;
	    p=p*p%mod;
	}
	return sq;
}
long long sum(long long p,long long n)
{
	if(n==0) return 1;
	if(n%2) return (sum(p,n/2)*(1+power(p,n/2+1)))%mod;
	else return (sum(p,n/2-1)*(1+power(p,n/2+1))+power(p,n/2))%mod; 
}
int main()
{
	while(cin>>A>>B)
	{
		int k=0;
		for(int i=2;i*i<=A;)
		{
				if(A%i==0)
				{
					p[++k]=i;
					n[k]=0;
					while(!(A%i))
					{
						n[k]++;
						A/=i;
					}
				}
				if(i==2) i++;
				else i+=2; 
		}
		if(A!=1){
		p[++k]=A;
		n[k]=1;
	    }
	    int ans=1;
	    for(int i=1;i<=k;i++)
	    	ans=ans*(sum(p[i],n[i]*B)%mod)%mod;
	     cout<<ans<<endl;
	}
	return 0;
 } 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值