hdu 2421 Deciphering Password(约数个数问题)

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);
    }
}




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115980.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 2021版idea激活码(已测有效)

    2021版idea激活码(已测有效),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
  • Python绘制旭日图_sunburst图如何做

    Python绘制旭日图_sunburst图如何做python绘制旭日图

    2022年9月26日
  • executeupdate mysql_executeupdate()

    executeupdate mysql_executeupdate()关于executeupdate()的搜索结果问题JFinal1.4+druid0.2.26model.save()保存怪事?报错//方法1,用model.save()方式。privatevoidsaveClickNum(Integertype,Longclick_pkid,Integerclick_num){…爱吃鱼的程序员2020-06-2216:49:050浏览量回…

    2022年10月20日
  • Windows API——CFile, read, write,typeBinary函数「建议收藏」

    Windows API——CFile, read, write,typeBinary函数「建议收藏」文件操作API和CFile类在VC中,操作文件的方法有两种,一是利用一些API函数来创建,打开,读写文件,另外一个是利用MFC的CFile类,CFile封装了对文件的一般操作。下面酒主要介绍如何利用这两种方法操作文件。1.创建或打开一个文件API函数CreateFile可打开和创建文件、管道、邮槽、通信服务、设备以及控制台,但是在此时只是介绍用这个函数怎么实现创建和打开一个文件。HANDL…

    2022年8月18日
  • 瑞利分布与莱斯分布[通俗易懂]

    瑞利分布与莱斯分布[通俗易懂]瑞利分布与瑞利衰落信道第一种理解:当一个随机二维向量的两个分量呈独立的、有着相同的方差的正态分布时,这个向量的模呈瑞利分布。瑞利分布是最常见的用于描述平坦衰落信号接收包络或独立多径分量接受包络统计时

    2022年7月2日
  • linux修改用户名的命令_linux退出root用户命令

    linux修改用户名的命令_linux退出root用户命令Linux将用户名修改后,还需要修改组名+家目录+UID这只会更改用户名,而其他的东西,比如用户组,家目录,UID等都保持不变。1、修改用户名$usermod-l新用户旧用户  这只会更改用户名,而其他的东西,比如用户组、家目录、ID等都保持不变。注意: 你需要从要改名的帐号中登出并杀掉该用户的所有进程,要杀掉该用户的所有进程可以执行下面命令$s…

    2022年9月18日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号