zoukankan      html  css  js  c++  java
  • SPOJ 7001

    这次求的是三维的。如上篇一样,使用那个特殊的莫比乌斯反演来做。

    需要注意的是,求得的只是从(1,1,1)到(n,n,n)的互质的个数,还要注意墙壁三面如(0,1,1)~(0,n,n)等。最后+3。因为是(0,0,1);

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define N 1000005
    
    using namespace std;
    typedef long long LL;
    int mobi[N];
    bool vis[N];
    int n;
    
    void initial(){
        int i,j;
        for(i=1;i<N;i++) mobi[i]=1,vis[i]=false; 
        for(i=2;i<N;i++) {
            if(vis[i]) continue;
            for(j=i;j<N;j+=i){
                vis[j]=true;
                if((j/i)%i==0){
                    mobi[j]=0; continue;
                }
                mobi[j]=-mobi[j];
            }
        }
    }
    
    int main(){
    	initial();
    	int T;
    	scanf("%d",&T);
    	while(T--){
    		scanf("%d",&n);
    		LL ans=0;
    		for(int i=1;i<=n;i++){
    			ans+=((LL)mobi[i]*(LL)(n/i)*(LL)(n/i)*(LL)(n/i)+3*(LL)mobi[i]*(LL)(n/i)*(LL)(n/i));
    		}
    		ans+=3;
    		printf("%lld
    ",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    Alpha冲刺Day5
    Alpha冲刺Day4
    Alpha冲刺Day3
    团队作业——随堂小测
    Alpha冲刺Day2
    Alpha冲刺Day1
    团队项目需求分析
    结对项目第二次作业
    Linux中exec命令相关
    .lib和.dll文件
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4004741.html
Copyright © 2011-2022 走看看