zoukankan      html  css  js  c++  java
  • BZOJ3944: Sum

    BZOJ3944: Sum

    Description

    Input

    一共T+1行
    第1行为数据组数T(T<=10)
    第2~T+1行每行一个非负整数N,代表一组询问

    Output

    一共T行,每行两个用空格分隔的数ans1,ans2

    Sample Input

    6
    1
    2
    8
    13
    30
    2333

    Sample Output

    1 1
    2 0
    22 -2
    58 -3
    278 -3
    1655470 2

    题解Here!
    这个应该算是杜教筛的模板题了。
    虽然我并不知道杜教是谁。。。
    放上几篇博客吧,这里懒得写了。。。
    实在不行就直接背板子嘛。。。
    附代码:
    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<map>
    #define MAXN 1700010
    using namespace std;
    map<int,long long> sum;
    int k=0,prime[MAXN],mu[MAXN];
    bool np[MAXN];
    inline long long read(){
    	long long date=0,w=1;char c=0;
    	while(c<'0'||c>'9'){if(c=='-')w=-1;c=getchar();}
    	while(c>='0'&&c<='9'){date=date*10+c-'0';c=getchar();}
    	return date*w;
    }
    void make(){
    	int m=MAXN-10;
    	mu[1]=1;
    	for(int i=2;i<=m;i++){
    		if(!np[i]){
    			prime[++k]=i;
    			mu[i]=-1;
    		}
    		for(int j=1;j<=k&&prime[j]*i<=m;j++){
    			np[prime[j]*i]=true;
    			if(i%prime[j]==0)break;
    			mu[prime[j]*i]=-mu[i];
    		}
    	}
    	for(int i=2;i<=m;i++)mu[i]+=mu[i-1];
    }
    long long solve_mu(long long n){
    	if(n<=MAXN-10)return mu[n];
    	if(sum.count(n))return sum[n];
    	long long ans=1;
    	for(long long i=2,last;i<=n;i=last+1){
    		last=n/(n/i);
    		ans-=1LL*(last-i+1)*solve_mu(n/i);
    	}
    	sum[n]=ans;
    	return ans;
    }
    long long solve_phi(long long n){
    	long long ans=0;
    	for(long long i=1,last;i<=n;i=last+1){
    		last=n/(n/i);
    		ans+=1LL*(n/i)*(n/i)*(solve_mu(last)-solve_mu(i-1));
    	}
    	return ((ans-1>>1)+1);
    }
    int main(){
    	make();
    	int t=read();
    	while(t--){
    		long long n=read();
    		printf("%lld %lld
    ",solve_phi(n),solve_mu(n));
    	}
        return 0;
    }
    
  • 相关阅读:
    Notes相关开发Tips
    gridView滚动条相关问题
    MyBatis学习(一)简单入门程序
    springMVC入门
    zoj 3702 Gibonacci number 找规律
    邻接表表示
    poj 1269 直线相交情况
    poj 3304 Segments 线段与直线相交的判断
    poj 1654 多边形面积
    zoj 3696 Alien's Organ 概率,泊松分布
  • 原文地址:https://www.cnblogs.com/Yangrui-Blog/p/9581583.html
Copyright © 2011-2022 走看看