spoj 7001
/***
大意:计算gcd(x,y,z) =1 0<= x, y , z <= n 问有多少个这样的对
莫比乌斯反演:(反演: 用结果推原因)
函数m(m)的定义如下:
莫比乌斯反演: * f(x) = sigma{g(d)}其中x % d == 0,则g(x) = sigma{miu(d) * f(x/d)}
* f(x) = sigma{g(d)}其中d % x == 0,则g(x) = sigma{miu(d/x) * f(d)} 莫比乌斯反演中miu(x) = * 1 {x中含有偶数个不同的质因子}
* -1 {x中含有奇数个不同的质因子}
* 0 {其他情况} 本题: 设f(x) = 约数为x 的所有数集合 g(x) = 最大公约数gcd 为x的集合
那么g(x) = siga(mu(d)*f(x/d)) x%d==0
或者 g(x) = siga(mu(d/x) *f(d)) d%x==0 在本题中只包含了x,y,z>1 情况 ,,还应加上退化到3个平面上的情况。。
1、 f(x) = n/x*n/x*n/x;----〉 g(x) = mu[i] *(n/x*n/x*n/x)
2、 加上退化到三个平面 ----〉 g(x) = mu[i]*(n/x+1)*(n/x+1)*(n/x+1) 或者分开求:
1、 三个坐标轴。。3
2、 空间中 n/x* n/x*n/x;
3、 三个坐标平面: n/x*n/x +n/x*n/x +n/x*n/x
**/
1、 第一种方法
#include <iostream>
#include <cstring>
using namespace std; const int maxn = ;
int pri[maxn];
int prime[maxn];
int mu[maxn]; void pri_mu(){
memset(prime,,sizeof(prime));
int cnt =;
mu[] =;
for(int i=;i<maxn;i++){
if(!prime[i]){
mu[i] =-;
pri[cnt++] = i;
}
for(int j=;j<cnt;j++){
if(i*pri[j]>maxn)
break;
prime[i*pri[j]] = ;
if(i%pri[j]==){
mu[i*pri[j]] =;
break;
}else
mu[i*pri[j]] = -mu[i];
}
}
} int main()
{
pri_mu();
int t;
cin>>t;
long long n;
while(t--){
cin>>n;
long long ans =;
for(int i=;i<=n;i++)
ans += (long long )mu[i]*((n/i+)*(n/i+)*(n/i+)-);
cout<<ans<<endl;
}
return ;
}
----------------------------------------------------------------------------------------------------------
2、 第二种方法
#include <iostream>
#include <cstring>
using namespace std; const int maxn = ;
int pri[maxn];
int prime[maxn];
int mu[maxn]; void pri_mu(){
memset(prime,,sizeof(prime));
int cnt =;
mu[] =;
for(int i=;i<maxn;i++){
if(!prime[i]){
mu[i] =-;
pri[cnt++] = i;
}
for(int j=;j<cnt;j++){
if(i*pri[j]>maxn)
break;
prime[i*pri[j]] = ;
if(i%pri[j]==){
mu[i*pri[j]] =;
break;
}else
mu[i*pri[j]] = -mu[i];
}
}
} int main()
{
pri_mu();
int t;
cin>>t;
long long n;
while(t--){
cin>>n;
long long ans =;
for(int i=;i<=n;i++)
ans += (long long )mu[i]*((n/i)*(n/i)*(n/i+));
cout<<ans<<endl;
}
return ;
}
spoj 7001的更多相关文章
- SPOJ 7001 VLATTICE【莫比乌斯反演】
题目链接: http://www.spoj.com/problems/VLATTICE/ 题意: 1≤x,y,z≤n,问有多少对(x,y,z)使得gcd(x,y,z)=1 分析: 欧拉搞不了了,我们用 ...
- spoj 7001. Visible Lattice Points GCD问题 莫比乌斯反演
SPOJ Problem Set (classical) 7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N la ...
- SPOJ 7001 VLATTICE - Visible Lattice Points(莫比乌斯反演)
题目链接:http://www.spoj.com/problems/VLATTICE/ 题意:求gcd(a, b, c) = 1 a,b,c <=N 的对数. 思路:我们令函数g(x)为g ...
- SPOJ 7001. Visible Lattice Points (莫比乌斯反演)
7001. Visible Lattice Points Problem code: VLATTICE Consider a N*N*N lattice. One corner is at (0,0, ...
- Spoj 7001 Visible Lattice Points 莫比乌斯,分块
题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=37193 Visible Lattice Points Time L ...
- SPOJ 7001(莫比乌斯反演)
传送门:Visible Lattice Points 题意:0<=x,y,z<=n,求有多少对xyz满足gcd(x,y,z)=1. 设f(d) = GCD(a,b,c) = d的种类数 : ...
- SPOJ 7001 Visible Lattice Points (莫比乌斯反演)
题意:求一个正方体里面,有多少个顶点可以在(0,0,0)位置直接看到,而不被其它点阻挡.也就是说有多少个(x,y,z)组合,满足gcd(x,y,z)==1或有一个0,另外的两个未知数gcd为1 定义f ...
- spoj 7001 Visible Lattice Points莫比乌斯反演
Visible Lattice Points Time Limit:7000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Su ...
- BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]
2588: Spoj 10628. Count on a tree Time Limit: 12 Sec Memory Limit: 128 MBSubmit: 5217 Solved: 1233 ...
随机推荐
- 多线程编程之二 ---MFC中的多线程开发
下载源代码 五.MFC对多线程编程的支持 MFC中有两类线程,分别称之为工作者线程和用户界面线程.二者的主要区别在于工作者线程没有消息循环,而用户界面线程有自己的消息队列和消息循环. 工作者线程没有消 ...
- uva 719 Glass Beads(后缀自动机)
[题目链接] https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=524&am ...
- [置顶] C#扩展方法 扩你所需
通过前面的学习,了解到:使用扩展方法,可以向现有类型“添加”方法.本文将使用扩展方法来对系统类型,自定义类型及接口进行方法扩展,一睹扩展方法的风采. 1.使用扩展方法来扩展系统类型 String是c# ...
- android错误之==与equals的区别
在做一个电话号码匹配的时候, 开始我使用的是这种情况 if (num == inCall.getNum()) { //操作... } 但是无论如何结果都是false,就算两个号码打印出来一模一样还是f ...
- Linux系统编程——进程调度浅析
概述 操作系统要实现多进程.进程调度不可缺少. 有人说,进程调度是操作系统中最为重要的一个部分.我认为这样的说法说得太绝对了一点,就像非常多人动辄就说"某某函数比某某函数效率高XX倍&quo ...
- PDFium-PDF开源之旅(1)-初探代码下载编译
近日,Google和Foxit合作开源了Foxit的PDF源代码. 叫PDFium 相关新闻不少.哈,虽说已经不是程序猿了.只是还是有兴趣跑起来围观看看.废话少说.先说编译代码的步骤(事实上Googl ...
- MSSQL常用函数大全
一.字符转换函数1.ASCII()返回字符表达式最左端字符的ASCII 码值.在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错. 2.CHA ...
- slf4j+log4j配置(Maven)
首先配置Maven依赖 <!-- http://mvnrepository.com/artifact/org.slf4j/slf4j-log4j12 --> <dependency& ...
- linux文件系统操作——底层文件访问
在不使用标准I/O的情况下,使用write,read,open实现对文件的复制操作,这些调用都是直接使用底层系统调用,完成从用户代码到内核代码的切换,消耗大量的系统资源,今天对此进行研究主要是 ...
- GCD 之 同步 异步 并发
1. dispatch_async(dispatch_get_global_queue(, ), ^{ // 处理耗时操作的代码块... //通知主线程刷新 dispatch_async(dispat ...