博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2017 ACM暑期多校联合训练 - Team 3 1008 HDU 6063 RXD and math (莫比乌斯函数)...
阅读量:4944 次
发布时间:2019-06-11

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

Problem Description

RXD is a good mathematician.
One day he wants to calculate:
∑i=1nkμ2(i)×⌊nki−−−√⌋
output the answer module 109+7.
1≤n,k≤1018
μ(n)=1(n=1)
μ(n)=(−1)k(n=p1p2…pk)
μ(n)=0(otherwise)
p1,p2,p3…pk are different prime numbers

Input

There are several test cases, please keep reading until EOF.
There are exact 10000 cases.
For each test case, there are 2 numbers n,k.

Output

For each test case, output "Case #x: y", which means the test case number and the answer.

Sample Input

10 10

Sample Output

Case #1: 999999937

分析:

u()函数是莫比乌斯函数,这个不影响做题,这个式子算的是[1,n^k]中能够写成(a×b^2)的数的个数,其中|u(a)|=1.然后我们可以证明任何数都可以唯一写成(a×b^2)的形式,因为(b = p1p2..pn),假设(a)中没有(b)中的因子,那么肯定是唯一表示的,如果(a)中含有(b)中的因子,改变表示的形式,那么肯定要将(b)改变,假设将任意一个(p)和(a)中的某个不在(b)中的质因子互换时,由于(p)无论在(a)中本来有或没都无法构成平方,所以无法互换,表达形式唯一。以这个式子会把[1, n^k]的每个整数恰好算一次. 所以答案就是n^k。

或则可以直接自己打表看一下简单的规律,比赛的时候就是自己写了几组数据找出来的规律。

#include
#include
typedef long long ll;const int mod=1e9+7;ll n,k;using namespace std;void solve(ll n,ll k){ ll ans=1; ll res=n; while(k) { if(k&1) ans=((ans%mod)*(res%mod))%mod; res=((res%mod)*(res%mod))%mod; k>>=1; } printf("%lld\n",ans);}int main(){ int Case=1; while(~scanf("%lld%lld",&n,&k)) { printf("Case #%d: ",Case++); solve(n,k); } return 0;}

​​

转载于:https://www.cnblogs.com/cmmdc/p/7272637.html

你可能感兴趣的文章
基础回顾之可变参数
查看>>
闲说测试
查看>>
[译]开闭原则
查看>>
四种简单的排序算法
查看>>
天外有天
查看>>
吴恩达《深度学习》第二门课(3)超参数调试、Batch正则化和程序框架
查看>>
[国嵌笔记][010][TFTP与NFS服务器配置]
查看>>
SEO 统计算法
查看>>
Bzoj2152/洛谷P2634 聪聪可可(点分治)
查看>>
CodeForces 163B Lemmings 二分
查看>>
剑指offer——数组中只出现一次的数字
查看>>
HDU3625 Examining the Rooms
查看>>
PowerDesigner从SqlServer数据库导入数据模型
查看>>
spring FileCopyUtils类 上传图片
查看>>
Java学习笔记-对象与垃圾回收
查看>>
tensorflow教程:tf.contrib.rnn.DropoutWrapper
查看>>
Codeforces-Round#546(Div.2)-D-Nastya Is Buying Lunch
查看>>
UVA 11134 FabledRooks 传说中的车 (问题分解)
查看>>
Python 将python工程打包成 .exe
查看>>
0221-3
查看>>