HDU 5382 莫比乌斯反演
题目大意:

求S(n)的值 n<=1000000

这是官方题解给出的推导过程,orz,按这上面说的来写,就不难了
这里需要思考的就是G(n)这个如何利用积性函数的性质线性筛出来
作为一个质数,那么肯定G(i) = 2
1. 那么一个数 i 乘上了一个未出现的素数prime,那么就相当于,在当前符合的因子上面都乘了prime之后依旧符合,而原来 i 对应的数也符合,那么说明翻了两倍
也就是 g(i*prime) = 2*g(i) = g(prime) * g(i)
2. 如果这个乘上的素数prime已经存在于 i 中 , 那么仔细想一下,只有 i 那些符合的因子中已经带prime的必须再乘上这个prime,不然这个prime跑到 i/d中,gcd = prime了,其他的都不变,说明其实 g(i*prime) = g(i) 的
#include <bits/stdc++.h> using namespace std;
#define N 1000000
#define ll long long
const int MOD=; ll g[N+] , t[N+] , f[N+];
ll sum[N+];
int prime[N/] , tot;
bool check[N+]; void get_g()
{
g[] = ;
for(int i= ; i<=N ; i++){
if(!check[i]) prime[tot++] = i , g[i] = ;
for(int j= ; j<tot ; j++){
if((ll)prime[j]*i>N) break;
check[prime[j]*i] = true;
if(i%prime[j]) g[prime[j]*i] = g[prime[j]]*g[i];
else {g[prime[j]*i]=g[i]; break;}
}
}
} void get_t()
{
for(int k= ; k<=N ; k++)
for(int i=k ; i<=N ; i+=k)
t[i] = (t[i]+g[k-])%MOD;
} void get_f()
{
for(int i= ; i<=N ; i++)
f[i] = (f[i-]+*i--t[i-])%MOD;
} void init()
{
get_g();
get_t();
get_f();
for(int i= ; i<=N ; i++) sum[i] = (sum[i-]+f[i])%MOD;
} int main()
{
//freopen("a.in" , "r" , stdin);
init();
int T , n;
scanf("%d" , &T);
while(T--){
scanf("%d" , &n);
printf("%I64d\n" , sum[n]);
}
return ;
}
HDU 5382 莫比乌斯反演的更多相关文章
- HDU 4746 (莫比乌斯反演) Mophues
这道题看巨巨的题解看了好久,好久.. 本文转自hdu4746(莫比乌斯反演) 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数<=p,(其中1<=a<= ...
- HDU 1695 (莫比乌斯反演) GCD
题意: 从区间[1, b]和[1, d]中分别选一个x, y,使得gcd(x, y) = k, 求满足条件的xy的对数(不区分xy的顺序) 分析: 虽然之前写过一个莫比乌斯反演的总结,可遇到这道题还是 ...
- GCD HDU - 1695 莫比乌斯反演入门
题目链接:https://cn.vjudge.net/problem/HDU-1695#author=541607120101 感觉讲的很好的一个博客:https://www.cnblogs.com/ ...
- HDU 5212 莫比乌斯反演
Code Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- hdu 1695(莫比乌斯反演)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 6053(莫比乌斯反演)
题意略. 思路:首先想到暴力去扫,这样的复杂度是n * min(ai),对于gcd = p,对答案的贡献应该是 (a1 / p) * (a2 / p) * .... * (an / p),得出这个贡献 ...
- hdu 4746Mophues[莫比乌斯反演]
Mophues Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327670/327670 K (Java/Others) Total ...
- 算术 HDU - 6715 (莫比乌斯反演)
大意: 给定$n,m$, 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^m\mu(lcm(i,j))$ 首先有$\mu(lcm(i,j))=\mu(i)\mu(j)\m ...
- HDU 4746 莫比乌斯反演+离线查询+树状数组
题目大意: 一个数字组成一堆素因子的乘积,如果一个数字的素因子个数(同样的素因子也要多次计数)小于等于P,那么就称这个数是P的幸运数 多次询问1<=x<=n,1<=y<=m,P ...
随机推荐
- PHP开发者常犯的MySQL错误
PHP开发者常犯的MySQL错误 数据库是WEB大多数应用开发的基础.如果你是用PHP,那么大多数据库用的是MYSQL也是LAMP架构的重要部分. PHP看起来很简单,一个初学者也可以几个小时内就 ...
- grub4dos通用菜单及相关工具包
grub4dos通用菜单及相关工具包 全套工具包(含PE.ISO,可根据需要替换删减):http://pan.baidu.com/s/1i4EjWod模板文件3.3M(不含PE.ISO):http:/ ...
- dom event无法获取问题
下列几种情况下无法获取到event,ff浏览器没测试. 1.a标签href调用的js事件 2.调用parent中事件,即子窗口调用父窗口页面中js 3....
- stdcall与cdecl的区别
1 区别 VC++的C/C++函数有两种基本的调用约定:__stdcall.__cdecl.它们有什么区别呢?请参考下表: __stdcall __cdecl 函数代码 C int __std ...
- JAVA多线程和并发基础面试问答
转载: JAVA多线程和并发基础面试问答 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对 ...
- Tomcat卸载
1.以管理员身份打开cmd,执行以下命令: C:Windows\system32>cd C:\Program Files\apache-tomcat-7.0.69\bin C:\Program ...
- Excepion
异常:就是程序在运行时出现不正常的情况. 异常由来:问题也就是现实生活中一个具体的食物,也可以通过java的类的形式进行秒速.并封装成对象.其实就是java对不正常情况进行毛素后的对象体现. 对于问题 ...
- Java 集合系列 13 WeakHashMap
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- State模式的经典应用场景:订单处理(c#实现)
State模式在对象内部状态发生变化的时候,改变自身的行为,这通常是通过切换内部状态对象实现的,对象将自身在各个状态的行为推给了状态对象,从而解开了行为与对象的依赖. 场景描述 在经典的订单处理场景中 ...
- IE9中Media queries在iframe无效的解决方法
在css中有5个media querie @media screen and(min-width:0px)and(max-width:319px){ body {background-color:re ...