• 17.64%
  • 1000ms
  • 131072K
 

A sequence of integer \lbrace a_n \rbrace{an​} can be expressed as:

\displaystyle a_n = \left\{ \begin{array}{lr} 0, & n=0\\ 2, & n=1\\ \frac{3a_{n-1}-a_{n-2}}{2}+n+1, & n>1 \end{array} \right.an​=⎩⎨⎧​0,2,23an−1​−an−2​​+n+1,​n=0n=1n>1​

Now there are two integers nn and mm. I'm a pretty girl. I want to find all b_1,b_2,b_3\cdots b_pb1​,b2​,b3​⋯bp​ that 1\leq b_i \leq n1≤bi​≤n and b_ibi​is relatively-prime with the integer mm. And then calculate:

\displaystyle \sum_{i=1}^{p}a_{b_i}i=1∑p​abi​​

But I have no time to solve this problem because I am going to date my boyfriend soon. So can you help me?

Input

Input contains multiple test cases ( about 1500015000 ). Each case contains two integers nn and mm. 1\leq n,m \leq 10^81≤n,m≤108.

Output

For each test case, print the answer of my question(after mod 1,000,000,0071,000,000,007).

Hint

In the all integers from 11 to 44, 11 and 33 is relatively-prime with the integer 44. So the answer is a_1+a_3=14a1​+a3​=14.

样例输入复制

4 4

样例输出复制

14

题目来源

ACM-ICPC 2018 沈阳赛区网络预赛

题意:

已知一个数列a 和整数n, m

现在想知道1-n中所有与m互质的数 作为下标的a的和

思路:

预先打表处理的话内存不够 推公式能推出a[i] = (i + 1) * i【虽然我好像没有推出来...】

所以Sn也是可以推出来的

某一个数的倍数的a求和也是可以推的 因为是ki 那么提出一个k来 就可以代入公式求了

小于n 与m互质的数没有什么特殊的规律 但应该想到素数筛时的做法 用上容斥

先求出1-n所有的a的和 再减去所有与m不互质的数

用容斥来求不互质的数 是正是负与质因数的个数有关 如果是奇数个质因数之积的话就是加 偶数就是减

用到了乘法逆元的模板

cal()函数注释掉的部分是WA的 改成了题解的方法就AC了

 #include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<vector>
#include<cmath>
#include<cstring>
#include<set>
//#include<bits/stdc++.h>
#define inf 0x7f7f7f7f7f7f7f7f
using namespace std;
typedef long long LL; const int maxn = 1e5 + ;
const LL mod = 1e9 + ;
LL inv6, inv2;
LL n, m; LL p[maxn];
int cnt;
void getprime(LL x)
{
cnt = ;
for (LL i = ; i * i <= x; i++) {
if (x % i == ) {
p[cnt++] = i;
}
while (x % i == ) {
x /= i;
}
}
if (x > ) {
p[cnt++] = x;
}
} void ex_gcd(int a, LL b, LL &d, LL &x, LL &y)
{
if(!b){
d = a;
x = ;
y = ;
}
else{
ex_gcd(b, a % b, d, y, x);
y -= x * (a / b);
}
} int mod_inverse(int a, LL m)
{
LL x, y, d;
ex_gcd(a, m, d, x, y);
return (m + x % m) % m;
} LL cal(LL n, LL k)
{
/*LL ans = n / k * (n / k + 1) % mod;
ans = ans * (2 * n / k + 1) % mod;
ans = ans * inv6 % mod * k % mod * k % mod;
ans = ans + k * (1 + n / k) % mod * n / k % mod * inv2 % mod;*/
n=n/k;
return (n%mod*(n+)%mod*(*n+)%mod*inv6%mod*k%mod*k%mod+n%mod*(n+)%mod*inv2%mod*k%mod)%mod;
//return ans;
} int main()
{
inv6 = mod_inverse(, mod);
inv2 = mod_inverse(, mod);
//cout<<mod_inverse(6, mod)<<endl<<mod_inverse(2, mod)<<endl;
while (scanf("%lld%lld", &n, &m) != EOF) {
memset(p, , sizeof(p));
getprime(m);
LL ans = ;
for(int i = ; i < ( << cnt); i++){
int flag = ;
LL tmp = ;
for(int j = ; j < cnt; j++){
if(i & ( << j)){
flag++;
tmp = tmp * p[j] % mod;
} }
tmp = cal(n, tmp) % mod;
if(flag % ){
ans = (ans % mod + tmp % mod) % mod;
}
else{
ans = (ans % mod - tmp % mod + mod) % mod;
}
}
printf("%lld\n", (cal(n, ) % mod - ans % mod + mod) % mod);
}
return ;
}

沈阳网络赛G-Spare Tire【容斥】的更多相关文章

  1. ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire(容斥)

    https://nanti.jisuanke.com/t/31448 题意 已知a序列,给你一个n和m求小于n与m互质的数作为a序列的下标的和 分析 打表发现ai=i*(i+1). 易得前n项和为 S ...

  2. ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire

    这题很好啊,好在我没做出来...大概分析了一下,题目大概意思就是求 问所有满足1<=i<=n且i与m互素的ai之和 最开始我们队的做法是类似线性筛的方法去筛所有数,把数筛出来后剩下数即可, ...

  3. ACM-ICPC 2018 沈阳赛区网络预赛 G. Spare Tire (容斥原理)

    可推出$a_n = n^2+n, $ 设\(S_n = \sum_{i=1}^{n} a_i\) 则 \(S_n = \frac{n(n+1)(2n+1)}{6} + \frac{n(n+1)}{2} ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛 G Spare Tire (素因子分解+容斥)

    . 样例输入复制 4 4 样例输出复制 14 #include<bits/stdc++.h> using namespace std; typedef long long ll; cons ...

  5. 2018 ICPC 沈阳网络赛

    2018 ICPC 沈阳网络赛 Call of Accepted 题目描述:求一个算式的最大值与最小值. solution 按普通算式计算方法做,只不过要同时记住最大值和最小值而已. Convex H ...

  6. 沈阳网络赛 F - 上下界网络流

    "Oh, There is a bipartite graph.""Make it Fantastic." X wants to check whether a ...

  7. 15ecjtu校赛1006 (dfs容斥)

    Problem Description 在平面上有一个n*n的网格,即有n条平行于x轴的直线和n条平行于y轴的直线,形 成了n*n个交点(a,b)(1<=a<=n,1<=b<= ...

  8. 【2019沈阳网络赛】G、Special necklace——自闭的物理题

    这道题让我差点怀疑自己高考没考过物理 题意中 he measures the resistance of any two endpoints of it, the resistance values ...

  9. 沈阳网络赛D-Made In Heaven【k短路】【模板】

    One day in the jail, F·F invites Jolyne Kujo (JOJO in brief) to play tennis with her. However, Pucci ...

随机推荐

  1. GDB十分钟教程 (链接)

    未联系作者,只能放个链接了. 十分赞的gdb教程. GDB十分钟教程

  2. VS2010 快捷键设置,快速编码1

    全屏:Shift+Alt+Enter注释选定内容:Ctrl+E+C/Crtr+E+U代码格式化:ctrl+E+F VS2008 使用小技巧——快捷键1. 怎样调整代码排版的格式?选择:编辑—>高 ...

  3. c网络编程-多播

    /* 编译通过环境,Windows XP sp2,Windows 2003 server SDK,VC++6.0 sp5. */ /********************************** ...

  4. MySQL 若干操作

    复制表结构+复制表数据 mysql> create table t3 like t1; mysql> insert into t3 select * from t1; mysql索引 1. ...

  5. 父div高度不能自适应子div高度的解决方案

    <div id="parent"><div id="content"> </div></div> 当conten ...

  6. Windows7下4种方式快速显示桌面

    1.Windows键+D快捷键直接显示桌面: 2.鼠标移到任务栏右下角直接显示桌面: 3.Windows键+空格快捷键显示桌面: 4.任务栏鼠标右键,选择“显示桌面”.

  7. 【matlab】图像去噪的代码测试

    %% 自己设置频域的滤波窗口 girl=imread('F:\Users\*****\Pictures\CGS_stripe1.bmp'); girl=rgb2gray(girl); girl=im2 ...

  8. shell中判断一个变量是否为0或者为某个具体的值

    需求说明: 在实际写脚本的过程中,需要判断某个变量的值是否为某个数字, 比如,判断某个进程的数量是否为0用来确定进程是否存在,这样的情况. 简单来说,算术比较. 测试过程: 通过以下的脚本来判断mys ...

  9. 基于windows的mongodb不支持mongodbsniff等其他一些功能

    http://stackoverflow.com/questions/15934102/mongodbs-mongosniff-for-windows

  10. POJ 1252 Euro Efficiency(完全背包, 找零问题, 二次DP)

    Description On January 1st 2002, The Netherlands, and several other European countries abandoned the ...