hdu 2421 Deciphering Password(约数个数问题)
http://acm.hdu.edu.cn/showproblem.php?pid=2421
A^B 能够写成 p1^e1 * p2^e2 * .....*pk^ek。(A。B <= 1000000)
求 ∏1^3+2^3+...+(ei+1)^3 % 10007的值。
依据质因子分解定理知A = p1^a1 * p2^a2 *.....* pk^ak,那么A^B = p1^(a1*B) * p2^(a2*B) *.....*pk^(ak*B)。
那么ei = ai*B,带入上式计算。
#include <stdio.h>
#include <iostream>
#include <map>
#include <set>
#include <bitset>
#include <list>
#include <stack>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#include <algorithm>
//#define LL __int64
#define LL long long
#define eps 1e-9
const double PI = acos(-1.0);
using namespace std; const int maxn = 1000010;
const int mod = 10007; LL A,B;
int prime[maxn];
bool flag[maxn];
LL facCnt[1010]; //由于数组开的太大,每次都须要初始化,导致TLE了几次。
int cnt; void getPrime()
{
memset(flag,false,sizeof(flag));
prime[0] = 0;
for(int i = 2; i < maxn; i++)
{
if(flag[i] == false)
prime[++prime[0]] = i;
for(int j = 1; j <= prime[0] && prime[j]*i < maxn; j++)
{
flag[prime[j]*i] = true;
if(i % prime[j] == 0)
break;
}
}
} void getFac()
{
LL tmp = A;
cnt = 0;
memset(facCnt,0,sizeof(facCnt));
for(int i = 1; i <= prime[0]&&prime[i]*prime[i] <= tmp; i++)
{
if(tmp % prime[i] == 0)
{
while(tmp%prime[i]==0)
{
facCnt[cnt]++;
tmp /= prime[i];
}
cnt++;
}
if(tmp == 1)
break;
}
if(tmp > 1)
{
facCnt[cnt++] = 1;
}
} int main()
{
getPrime();
int item = 0;
while(~scanf("%I64d %I64d",&A,&B))
{
getFac();
LL ans = 1;
for(int i = 0; i < cnt; i++)
{
LL s = (((facCnt[i]*B+1)*(facCnt[i]*B+2))/2 )%mod;
s = (s*s)%mod;
ans = (ans*s)%mod;
}
printf("Case %d: %I64d\n",++item,ans);
}
}
hdu 2421 Deciphering Password(约数个数问题)的更多相关文章
- hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others) ...
- hdu1492(约数个数定理)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1492 这里先讲一下约数个数定理: 对于正整数x,将其质因分解为 x = pow(p1, a) * po ...
- 【BZOJ】3994: [SDOI2015]约数个数和
题意: \(T(1 \le T \le 50000)\)次询问,每次给出\(n, m(1 \le n, m \le 50000)\),求\(\sum_{i=1}^{n} \sum_{j=1}^{m} ...
- UVA294DIvisors(唯一分解定理+约数个数)
题目链接 题意:输入两个整数L,U(L <= U <= 1000000000, u - l <= 10000),统计区间[L,U]的整数中哪一个的正约数最多,多个输出最小的那个 本来 ...
- BZOJ3994: [SDOI2015]约数个数和
Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. O ...
- BZOJ 3994 约数个数和
Description 设\(d(x)\)为\(x\)的约数个数,给定\(N,M\),求\[\sum_{i=1}^{N}\sum_{j=1}^{M}d(ij)\]. Input 输入文件包含多组测试数 ...
- bzoj:3994:vijos1949: [SDOI2015]约数个数和
Description 设d(x)为x的约数个数,给定N.M,求 Input 输入文件包含多组测试数据. 第一行,一个整数T,表示测试数据的组数. 接下来的T行,每行两个整数N.M. O ...
- BZOJ 3994: [SDOI2015]约数个数和 [莫比乌斯反演 转化]
2015 题意:\(d(i)\)为i的约数个数,求\(\sum\limits_{i=1}^n \sum\limits_{j=1}^m d(ij)\) \(ij\)都爆int了.... 一开始想容斥一下 ...
- 【BZOJ3994】约数个数和(莫比乌斯反演)
[BZOJ3994]约数个数和(莫比乌斯反演) 题面 求\[\sum_{i=1}^n\sum_{j=1}^md(ij)\] 多组数据\((<=50000组)\) \(n,m<=50000\ ...
随机推荐
- byte与sbyte的转换
C#实现byte与sbyte的转换 byte[] mByte; sbyte[] mSByte = new sbyte[mByte.Length]; ; i < mByte.Length; i++ ...
- Oracle EBS-SQL (SYS-7):表单个性化查询.sql
SELECT * FROM FND_FORM_CUSTOM_RULES; SELECT * FROM FND_FORM_CUSTOM_ACTIONS; SELECT * FROM FND_FORM_C ...
- Qt编译时MinGW去掉对gcc动态库的依赖(去掉对libgcc_s_dw2-1.dll,libstdc++-6.dll的依赖)
用Qt写点东西,我一般是下载官方的MinGW编译工具包,它有个不好的地方,经常还会多一些除了Qt库以外的其它的依赖动态链接库,比如:libgcc_s_dw2-1.dll,libstdc++-6.dll ...
- 交通银行万事达Y-POWER信用卡 普卡
签账消费 免息尽享 失卡保护 风险全无 密码签名 任选 境外使用 本币还款 国内海外 环球支持 适合人群:年轻一族 发行状态:发行中 年费: 140元 币种: 人民币+美元 免年费政策:免首年 ...
- poj2350
#include <stdio.h> #include <stdlib.h> int main() { ],tim,i; scanf("%d",&n ...
- js预处理图片个人见解1
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Review1-11
泛型 泛型类 Public 类名 class<T>{} 泛型方法 Public static <T> 返回类型 方法名(<T> t){} 泛型类型必须使用引用类型 ...
- 如何判断是否按下Ctrl键 - C#
可根据Control.ModifierKeys来判断用户是否按下了组合键. if ((Control.ModifierKeys & Keys.Control) == Keys.Control) ...
- Ado.net 类扩展属性
.要扩展的类名字一样,2个类加(partial) 小例子: using System; using System.Collections.Generic; using System.Linq; usi ...
- pl sql项目演练--B2C商城项目
项目学习视频下载地址:点击下载 1.注册会员及找回密码模块 }该模块主要功能有注册会员和找回密码 }注册会员:所需信息主要有:登录号.密码.真实姓名.性别.密码问题.密码答案.Email.地址.电 ...