博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 3923 Invoker
阅读量:4650 次
发布时间:2019-06-09

本文共 1295 字,大约阅读时间需要 4 分钟。

完全是套用polya模版……

#include<iostream>

#include<stdio.h>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<string>
using namespace std;
int
prime[30005],m,mod=1000000007;
bool
f[30005];
__int64
extend(__int64 a,__int64 b,__int64 &x,__int64 &y)
{
    __int64
d;
    if
(b==0)
    {
        x=1;y=0;
        return
a;
    }
    else
    {
        d=extend(b,a%b,x,y);
        __int64
t=x;
        x=y;
        y=t-a/b*y;
    }
    return
d;
}
void
init()
{
    int
i,j;
    m=0;
    for
(i=2;i<=30000;i++)
        if
(f[i]==0)
        {
            prime[m++]=i;
            for
(j=i*i;j<=30000;j+=i)
                f[j]=1;
        }
}
__int64
euler(__int64 n)
{
    __int64
ans=1,i;
    for
(i=0;i<m&&prime[i]*prime[i]<=n;i++)
    {
        if
(n%prime[i]==0)
        {
            ans*=prime[i]-1;
            n/=prime[i];
            while
(n%prime[i]==0)
            {
                ans*=prime[i];
                n/=prime[i];
            }
        }
    }
    if
(n>1) ans*=n-1;
    return
ans%mod;
}
__int64
pows(__int64 a,__int64 b)
{
    __int64
ans=1;
    a=a%mod;
    while
(b)
    {
        if
(b&1) ans=(ans*a)%mod;
        b>>=1;
        a=(a*a)%mod;
    }
    return
ans;
}
int
main()
{
    init();
    int
t,i,j,n,s,k=0;
    __int64
ans;
    cin>>t;
    while
(t--)
    {
        cin>>n>>s;
        ans=0;
        for
(i=1;i<=s;i++)
        {
            if
(s%i==0)
                ans=(ans+pows(n,i)*euler(s/i))%mod;
        }
        if
(s&1)
        {
            ans=(ans+pows(n,(s+1)/2)*s)%mod;
        }
        else
        {
            ans=(ans+pows(n,s/2)*(s/2))%mod;
            ans=(ans+pows(n,s/2+1)*(s/2))%mod;
        }
        __int64
x,y;
        extend(s<<1,mod,x,y);
        x=(x%mod+mod)%mod;
        ans=(ans*x)%mod;
        printf("Case #%d: %d\n",++k,ans);
    }
    return
0;
}

转载于:https://www.cnblogs.com/xin-hua/p/3199065.html

你可能感兴趣的文章
【 全干货 】5 分钟带你看懂 Docker !
查看>>
[转]优化Flash性能
查看>>
popStar手机游戏机机对战程序
查看>>
lambda表达式树
查看>>
二次注入原理及防御
查看>>
会话记住已登录功能
查看>>
Linux内核分析——可执行程序的装载
查看>>
第一阶段冲刺3
查看>>
父类引用指向子类对象
查看>>
网页如何实现下载功能
查看>>
IT男专用表白程序
查看>>
读《大道至简》第六章感想
查看>>
ef linq 中判断实体中是否包含某集合
查看>>
章三 链表
查看>>
Solution for Concurrent number of AOS' for this application exceeds the licensed number
查看>>
CSE 3100 Systems Programming
查看>>
IntelliJ IDEA 的Project structure说明
查看>>
Java Security(JCE基本概念)
查看>>
Linux Supervisor的安装与使用入门
查看>>
创建 PSO
查看>>