• HDU 3501 Calculation 2 ——Dirichlet积


    【题目分析】

        卷积太有趣了。

        

        最终得出结论,互质数和为n*phi(n)/2即可。

        用总和减去互质数之和即可,即(n*(n+1)/2-n-n*phi(n)/2)%md。

    【代码】

    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <cstdlib>
    
    #include <map>
    #include <set>
    #include <queue>
    #include <string>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    #define maxn 500005
    #define md 1000000007 
    #define ll long long
    #define inf 0x3f3f3f3f
    #define F(i,j,k) for (int i=j;i<=k;++i)
    #define D(i,j,k) for (int i=j;i>=k;--i)
    
    void Finout()
    {
    	#ifndef ONLINE_JUDGE
    	freopen("in.txt","r",stdin);
    //	freopen("out.txt","w",stdout);
    	#endif
    }
    
    int Getint()
    {
    	int x=0,f=1; char ch=getchar();
    	while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();}
    	while (ch>='0'&&ch<='9') x=x*10+ch-'0';
    	return x*f;
    }
    
    ll n;
    
    ll phi(ll x)
    {
    	ll t=x,upp=sqrt(x);
    	F(i,2,upp)
    	{
    		if (x%i==0) {t/=i;t*=i-1;}
    		while (x%i==0) x/=i;
    	}
    	if (x>1) t/=x,t*=x-1;
    	return t; 
    }
    
    int main()
    {
    	Finout();
    	while (scanf("%lld",&n)&&n)
    		cout<<(n*(n+1)/2-n-n*phi(n)/2)%md<<endl;
    }
    

      

  • 相关阅读:
    poj1703--Find them, Catch them
    poj2828--Buy Tickets
    POJ 2594 Treasure Exploration(Floyd+最小路径覆盖)
    HDU
    二分图的一些性质
    HDU
    POJ 1659 Frogs' Neighborhood (Havel定理构造图)
    HDU
    HDU
    2018 Multi-University Training Contest 1
  • 原文地址:https://www.cnblogs.com/SfailSth/p/6287534.html
Copyright © 2020-2023  润新知