zoukankan      html  css  js  c++  java
  • 【数论】【欧拉函数】CDOJ1724 为了我们心爱的京电

    京州电子科技大学遭遇废校危机,为了保护我们心爱的学校,N位魔法少女站了出来,她们能做的就是……成为偶像! 每个魔法少女都拥有一定的人气,他们中的每个人的人气计算方式如下: 假设某个魔法少女的学号为a,学号从1到a-1的共a-1位同学都会为她应援,学号为i的同学能让这位魔法少女增加gcd(a,i)的人气值。 这N位魔法少女最终能否拯救我们的学校呢,试着计算一下他们的总人气值吧! title

    Input

    第一行有一个数字N,表示魔法少女的个数 第二行共有N个数字,分别是a[i],表示第i为魔法少女的学号 其中1<=N<=1e4, 1<=a[i]<=1e6

    Output

    输出一个数,N位魔法少女的总人气值

    对每个数a[i],枚举所有约数d,答案就是Σphi(d)*a[i]/d,很显然。

    #include<cstdio>
    using namespace std;
    typedef long long ll;
    int phi[1000010];
    void phi_table(int n){
    	phi[1]=1;
    	for(int i=2;i<=n;++i){
    		if(!phi[i]){
    			for(int j=i;j<=n;j+=i){
    				if(!phi[j]){
    					phi[j]=j;
    				}
    				phi[j]=phi[j]/i*(i-1);
    			}
    		}
    	}
    }
    int n;
    ll ans;
    void work(int x,int y){
    	if(y==1){
    		return;
    	}
    	ans+=(ll)(x/y)*(ll)phi[y];
    }
    int main(){
    	int x;
    	phi_table(1000000);
    	scanf("%d",&n);
    	for(int i=1;i<=n;++i){
    		scanf("%d",&x);
    		for(int j=1;j*j<=x;++j){
    			if(x%j==0){
    				work(x,j);
    				if(j!=x/j){
    					work(x,x/j);
    				}
    			}
    		}
    	}
    	printf("%lld
    ",ans);
    	return 0;
    }
  • 相关阅读:
    初学angular
    C#二维数组及其本质(转)
    蓝桥杯之递归算法
    同时安装Office2016和Visio2016
    蓝桥杯之暴力破解、枚举
    NAT(地址解析协议)
    云中继
    ACL(访问控制列表)
    虚拟链路(virtual-link)
    单臂路由
  • 原文地址:https://www.cnblogs.com/autsky-jadek/p/7117440.html
Copyright © 2011-2022 走看看