bzoj 3202: [Sdoi2013]项链
Description
项链是人体的装饰品之一,是最早出现的首饰。项链除了具有装饰功能之外,有些项 链还具有特殊显示作用,如天主教徒的十字架
链和佛教徒的念珠。 从古至今人们为了美化人体本身,也美 化环境,制造了各种不同风格,不同特点、不同式样的项链,满足了不同肤色、不同民族、不同审美观的人的审美需要。就材料而论,首
饰市场上的项链有黄金、白银、珠宝等几种。珍珠项链为珍珠制成的饰品,即将珍珠 钻孔后用线串在一起,佩戴于项间。天然珍珠项链具有一定的护养作用。
最近,铭铭迷恋上了一种项链。与其他珍珠项链基本上相同,不过这种项链的珠子却 与众不同,是正三菱柱的泰山石雕刻而成的。三菱柱的侧面是正方形构成的,上面刻有数字。 能够让铭铭满意的项链必须满足下面的条件:
1:这串项链由n颗珠子构成的。
2:每一个珠子上面的数字x,必须满足0<x<=a,且珠子上面的数字的最大公约数要恰 好为1。两个珠子被认为是相同的,当且仅当他们经过旋转,或者翻转后能够变成一样的。 3:相邻的两个珠子必须不同。
4:两串项链如果能够经过旋转变成一样的,那么这两串项链就是相同的! 铭铭很好奇如果给定n和a,能够找到多少不同串项链。由于答案可能很大,所以对输 出的答案mod 1000000007。Input
数据由多组数据构成:
第一行给定一个T<=10,代表由T组数据。
接下来T行,每行两个数n和a。
Output
对于每组数据输出有多少不同的串。
Sample Input
1
2 2Sample Output
3HINT
对于100%的数据:所有的n<=10^14,a<=10^7,T<=10;
样例解释:由三种珠子:[1,1,1],[1,1,2],[1,2,2].组成的串有:[1,2],[1,3],[2,3]。
Source
Dragonite修正数据 vfleaking加强数据
有一篇超级详细的题解,所以我就不说了
啊涨姿势了学会了7k+的$O(1)$快速乘
inline LL mul(LL x,LL y)
{
LL tmp=(x*y-(LL)((LD)x/Mod*y+1.0e-8)*Mod);
return tmp< ? tmp+Mod : tmp;
}
code:
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <cmath>
#define LL long long
#define LD long double
using namespace std;
const LL Maxn = ;
LL Modd = , Mod;
LL n, m;
LL mu[Maxn], pr[Maxn], pl, muu[Maxn], ph[Maxn];
bool v[Maxn], bk;
LL mul ( LL x, LL y ){
if ( bk == true ){
LL ret = , op = ;
if ( x < ){ x = -x; op = -op; }
while (x){
if ( x & ) ret = (ret+y)%Mod;
y = (y<<)%Mod;
x >>= ;
}
return ret*op;
}
else {
LL tmp=(x*y-(LL)((LD)x/Mod*y+1.0e-8)*Mod);
return tmp< ? tmp+Mod : tmp;
}
}
/*inline LL mul(LL x,LL y)
{
LL tmp=(x*y-(LL)((LD)x/Mod*y+1.0e-8)*Mod);
return tmp<0 ? tmp+Mod : tmp;
}*/
void init (){
pl = ;
LL i, j; mu[] = muu[] = ph[] = ;
for ( i = ; i <= ; i ++ ){
if ( v[i] == false ){
pr[++pl] = i;
mu[i] = -;
ph[i] = i-;
}
for ( j = ; j <= pl && i*pr[j] <= ; j ++ ){
v[i*pr[j]] = true;
if ( i % pr[j] == ){ ph[i*pr[j]] = ph[i]*pr[j]; mu[i*pr[j]] = ; break; }
else ph[i*pr[j]] = ph[i]*ph[pr[j]], mu[i*pr[j]] = -mu[i];
}
muu[i] = muu[i-]+mu[i];
}
}
struct matrix {
LL a[][];
LL l1, l2;
void clear (){ memset ( a, , sizeof (a) ); }
}trans, x, fi;
matrix ttimes ( matrix x, matrix y ){
matrix ret;
ret.clear ();
ret.l1 = x.l1; ret.l2 = y.l2;
LL i, j, k;
for ( i = ; i < ret.l1; i ++ ){
for ( j = ; j < ret.l2; j ++ ){
for ( k = ; k < x.l2; k ++ ){
ret.a[i][j] = (ret.a[i][j]+mul(x.a[i][k],y.a[k][j])%Mod)%Mod;
}
}
}
return ret;
}
LL p[Maxn], ppl;
LL phi ( LL x ){
if ( x <= ) return ph[x];
LL ret = x, u = x;
for ( LL i = ; i <= pl; i ++ ){
if ( x % pr[i] == ){
ret = ret/pr[i]*(pr[i]-);
while ( x % pr[i] == ) x /= pr[i];
}
if ( pr[i]*pr[i] > u ) break;
}
if ( x > ) ret = ret/x*(x-);
return ret;
}
LL pow ( LL x, LL k ){
LL ret = ;
while (k){
if ( k & ) ret = mul(ret,x)%Mod;
x = mul(x,x)%Mod;
k >>= ;
}
return ret;
}
int main (){
LL i, j, k, T;
scanf ( "%lld", &T );
init ();
while ( T -- ){
scanf ( "%lld%lld", &n, &m );
if(n== && m==) bk=;
if ( m == ){
printf ( "0\n" );
continue;
}
LL invn, phii;
Mod = Modd;
if ( n % Modd != ) invn = pow ( n, Modd- ), phii = Modd-;
else invn = pow ( n/Modd, Modd- ), Mod = Modd*Modd, phii = Modd*(Modd-);
LL ans2 = , ans3 = ;
LL pos;
for ( i = ; i <= m; i = pos+ ){
LL u = m/i, t; pos = m/(m/i);
t = mul (u,u);
ans2 = (ans2+mul(t,muu[pos]-muu[i-]))%Mod;
t = mul (t,u);
ans3 = (ans3+mul(t,muu[pos]-muu[i-]))%Mod;
}
LL inv = pow ( (LL), phii- );
LL o = mul((ans3+(mul(ans2,(LL)))+)%Mod,inv);
ppl = ; LL sq = sqrt (n);
for ( i = ; i <= sq; i ++ ){
if ( n % i == ) p[++ppl] = i;
}
for ( i = ppl; i >= ; i -- ){
if ( p[i]*p[i] == n ) continue;
p[++ppl] = n/p[i];
}
p[++ppl] = n;
trans.l1 = trans.l2 = ;
trans.a[][] = ; trans.a[][] = o-;
trans.a[][] = ; trans.a[][] = o-;
fi.l1 = ; fi.l2 = ;
fi.a[][] = ; fi.a[][] = mul(o,o-);
LL ans = ;
p[] = ;
for ( i = ; i <= ppl; i ++ ){
x = trans;
for ( j = p[i]-p[i-]; j >= ; j >>= ){
if ( j & ) fi = ttimes ( fi, x );
x = ttimes ( x, x );
}
ans = ( ans + mul(fi.a[][],phi(n/p[i])) ) % Mod;
}
if ( n % Modd == ) ans /= Modd;
printf ( "%lld\n", ((ans*invn)%Modd+Modd)%Modd );
}
return ;
}
bzoj 3202: [Sdoi2013]项链的更多相关文章
- 洛谷 P3307: bzoj 3202: [SDOI2013] 项链
题目传送门:洛谷P3307.这题在bzoj上是权限题. 题意简述: 这题分为两个部分: ① 有一些珠子,每个珠子可以看成一个无序三元组.三元组要满足三个数都在$1$到$m$之间,并且三个数互质,两个珠 ...
- bzoj 3202 [Sdoi2013]项链——容斥+置换+推式子
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3202 可见Zinn博客:https://www.cnblogs.com/Zinn/p/100 ...
- BZOJ3202 [Sdoi2013]项链
Problem E: [Sdoi2013]项链 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 427 Solved: 146[Submit][Sta ...
- BZOJ 3202 项链
题目连接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=3202 题意:一个项链由n个珠子组成.每个珠子有三个面,每个面上有一个数字,要求每个 ...
- bzoj 3202 [Sdoi 2013] 项链 —— 置换+计数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3202 参考了博客: https://www.cnblogs.com/zhoushuyu/p/ ...
- BZOJ 3790 神奇项链 hash/后缀自动机+贪心
Description 母亲节就要到了,小 H 准备送给她一个特殊的项链.这个项链可以看作一个用小写字母组成的字符串,每个小写字母表示一种颜色. 为了制作这个项链,小 H 购买了两个机器.第一个机器可 ...
- bzoj3202:[Sdoi2013]项链
思路:首先考虑如何求珠子个数,一个珠子由a,b,c三个数组成且属于区间[1,a],并满足gcd(a,b,c)=1.由于要求本质相同,对于a,b,c这样的一个无序的数列且满足gcd(a,b,c)=1,设 ...
- bzoj 1493: [NOI2007]项链工厂(线段树)
1493: [NOI2007]项链工厂 Time Limit: 30 Sec Memory Limit: 64 MBSubmit: 1256 Solved: 545[Submit][Status] ...
- [BZOJ 3198] [Sdoi2013] spring 【容斥 + Hash】
题目链接:BZOJ - 3198 题目分析 题目要求求出有多少对泉有恰好 k 个值相等. 我们用容斥来做. 枚举 2^6 种状态,某一位是 1 表示这一位相同,那么假设 1 的个数为 x . 答案就是 ...
随机推荐
- python小知识积累
- python 调用dll中c或c++语言的带指针方法,
在项目开发中遇到了,python需要去调用一个动态链接库dll中的c++方法.这个方法的参数为一个指针类型的参数,一个bool类型参数, 在python中并未对数字类型进行区分. int LP_Agc ...
- instanceof运算符
instanceof运算符:判断该对象是否是某一个类的实例. 语法格式:boolean b = 对象A instanceof 类B://判断A对象是否是B类的实例,如果是返回true. 若对象是类的实 ...
- 键盘按钮keyCode大全
字母和数字键的键码值(keyCode) 按键 键码 按键 键码 按键 键码 按键 键码 A 65 J 74 S 83 1 49 B 66 K 75 T 84 2 50 C 67 L 76 U 85 3 ...
- Objective-C中的浅拷贝和深拷贝(转载)
本文转自:http://segmentfault.com/blog/channe/1190000000604331 浅拷贝 浅拷贝就是对内存地址的复制,让目标对象指针和源对象指向同一片内存空间.如: ...
- 前端JS常用字符串处理实例
字符串处理常常用在处理服务器回传的数据.动态拼接生成html等,是前端面试的必考题. 我觉得字符串处理这种常用到的,一定要了然于心,不然用到时急急忙忙去翻手册费半天. 入正题,首先提出平常遇到的几个需 ...
- 使用KRPano资源分析工具强力加密KRPano项目(XML防破解,切片图保护,JS反调试)
软件交流群:571171251(软件免费版本在群内提供) krpano技术交流群:551278936(软件免费版本在群内提供) 最新博客地址:blog.turenlong.com 限时下载地址:htt ...
- 关于VPN的一些问题
在今在外出差,必须得连上公司的数据库,那就得使用VPN了,设置起来还算比较简单(我是win10), 简单介绍一下: 打开设置或者直接点击右下角的
- ios app内嵌入http服务器
1.采用CocoaHTTPServer https://github.com/robbiehanson/CocoaHTTPServer 2.采用MongooseDaemon https://githu ...
- 表达式求值(noip2015等价表达式)
题目大意 给一个含字母a的表达式,求n个选项中表达式跟一开始那个等价的有哪些 做法 模拟一个多项式显然难以实现那么我们高兴的找一些素数代入表达式,再随便找一个素数做模表达式求值优先级表 - ( ) + ...