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


相关推荐

  • sql中decode的用法_sql求和函数

    sql中decode的用法_sql求和函数decode()函数的语法:其中:columnname为要选择的table中所定义的column;缺省值可以是你要选择的columnname本身,也可以是你想定义的其他值,比如Other等;

    2022年8月1日
    15
  • win10 禁止自动更新(修改注册表)

    win10 禁止自动更新(修改注册表)参考:https://blog.csdn.net/qq_40833810/article/details/89045074?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task第一步:按win+R,输入regedit,回车打开注册表编辑器,…

    2022年5月5日
    122
  • MySQL中tinytext、text、mediumtext和longtext等各个类型详解[通俗易懂]

    MySQL中tinytext、text、mediumtext和longtext等各个类型详解[通俗易懂]一、字符串类型类型范围说明Char(N)[binary]N=1~255个字节binary:分辨大小写固定长度std_namecahr(32)notnullVarChar(N)[binary]N=1~255个字节binary:分辨大小写可变长度std_addressvarchar(256)TinyBlob最大长度255个字节(2^8-1)Blob(Binarylarge…

    2022年4月19日
    128
  • Lenovo windows 解决win键失灵

    Lenovo windows 解决win键失灵电脑突然win键就不能用了,实在太影响使用了!!!上网查了查,估计是把win键锁住了要解锁的话,好像不同的电脑不太一样我的电脑是lenovo的F9+Fn就能开关win键如果不可以的话,建议按住Fn键其他的组合键挨个试一下。…

    2022年5月9日
    63
  • sql中的联合查询「建议收藏」

    sql中的联合查询「建议收藏」我们在实际应用中,或许会用到关于sql的联合查询的应用,下面来总结一下联合查询的具体应用,做一下记录便于记忆。首先,通过一个实例来讲一下联合查询(关键词union)语法:select………unionselect……..union…….select*fromempoloyeeswhereemaillike”%a%”ordepartment_id>90;改用union的用法select*fromempol

    2022年5月12日
    39
  • 没有人不为真情所动,你若不流泪,我请你吃饭。[通俗易懂]

    没有人不为真情所动,你若不流泪,我请你吃饭。[通俗易懂]我是哭了好几场啊,难道我神经脆弱?告诉我你哭了几场,我脸都洗不过来啊。不是我不懂爱情,没有爱心,不相信真情,确是这世界忙碌得很,谁与我共行?科学探索:英国一位农夫在自家花园内发现了三只瑟瑟发抖的小狐狸,于是给了它们一个毛绒玩具。没想到小家伙们把它当做了自己的妈妈,不但和它形影不离,吃饭的时候还会留下部分食物,把盆子推到它跟前好友爱的一幕!给饿了的小北极熊食物。在蛮荒之地,气候恶劣。食物不足时,白熊…

    2022年7月12日
    18

发表回复

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

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