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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言数组合并「建议收藏」

    c语言数组合并「建议收藏」c语言数组合并;注意,在函数中计算数组的长度可能会出错,尽量调用数组长度值#include&lt;stdio.h&gt;#include&lt;stdlib.h&gt;voidmergelist(int*a,intlen_a,int*b,intlen_b,int*c);//两个数组合并voidmergelist(int*a,intlen_a,int*b,int…

    2025年6月14日
    0
  • OpenCV学习笔记(29)KAZE 算法原理与源码分析(三)特征检测与描述

    OpenCV学习笔记(29)KAZE 算法原理与源码分析(三)特征检测与描述KAZE系列笔记:1. OpenCV学习笔记(27)KAZE算法原理与源码分析(一)非线性扩散滤波2. OpenCV学习笔记(28)KAZE算法原理与源码分析(二)非线性尺度空间构建3. OpenCV学习笔记(29)KAZE算法原理与源码分析(三)特征检测与描述4. OpenCV学习笔记(30)KAZE算法原理与源码分析(四)KAZE特征的性能分析与比较5. OpenCV学习笔记

    2022年6月18日
    37
  • 罗技键盘k380打不了字_罗技k380键盘配对成功后无法使用

    罗技键盘k380打不了字_罗技k380键盘配对成功后无法使用mac连接成功罗技k380键盘,但是发现数字键上面的字符对不上,很多字符以及标点符号都打不出来,是什么原因导致的呢?问题分析首先,分析一下,到底是什么原因导致的?可以连接其他设备试一试,比如我发现k380键盘在我的ipad上是可以正常使用的。那么就排除了键盘本身存在问题,坏了等猜测。如果不是键盘本身出了问题,那么我们就要去分析问题究竟出现在哪里?联系了客服,加上自己对键盘配对过程的回顾,大致判定问题出现在最开始的匹配的时候,选错了【键盘类型】。解决问题-重设【键盘类型】步骤如下:【系统偏好设置

    2022年10月9日
    0
  • python核心编程

    python核心编程1:正则表达式:正则表达式是包含文本和特殊字符的字符串,该字符串描述一个可以识别各种字符串的模式[A-Za-z]\w+的含义是第一个字符是字母,也就是说要么A~Z,要么a~z,后面是至少一个(+)

    2022年7月3日
    19
  • OpenProcessToken

    OpenProcessTokenOpenProcessToken  要对一个任意进程(包括系统安全进程和服务进程)进行指定了写相关的访问权的OpenProcess操作,只要当前进程具有SeDeDebug权限就可以了。要是一个用户是Administrator或是被给予了相应的权限,就可以具有该权限。可是,就算我们用Administrator帐号对一个系统安全进程执行OpenProcess(PROCESS_ALL_ACCES

    2022年6月25日
    20
  • python 文档注释快捷键,python注释快捷键是什么「建议收藏」

    python 文档注释快捷键,python注释快捷键是什么「建议收藏」python注释快捷键:1、单行注释是【#】,Mac的快捷键是【command+/】,windows的快捷键是【Ctrl+/】;2、多行注释是三个单引号【”’注释”’】。g1m少儿编程网-https://www.pxcodes.comg1m少儿编程网-https://www.pxcodes.com本教程操作环境:windows7系统、python3.9版,DELLG3电脑。g1m少儿编程…

    2022年5月12日
    56

发表回复

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

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