zoukankan      html  css  js  c++  java
  • [欧拉函数] ihp

    题面

    有这样一个函数,函数的定义域为 (N^*),值域也是 (N^*),并且这个函数 (f(x)) 对任意正整数 (n) 满足:(sumlimits_{d|n}f(d)=n)
    现在给你 (N) 个数,要求 (N) 个数的函数值和。

    数据范围

    (10%) 的数据,(N=3*10^7)(A_i=7)

    另外两个数据分别为:

    (N=5)(A_i={162614600673829、 1125897758834689、 222915410844073、 18004502351257601、 2001600073928249})
    和:(N=3)(Ai={18014398241046527、 18014398777917439、 489133282872437279})


    代码:

    // 裸欧拉函数
    // 这题主要传达的一个思想就是一个做法解决不了的部分可以搞成 SubTask 甚至于打表,
    // 毕竟比赛的时候还是以得分为主的
    
    # include <iostream>
    # include <cstdio>
    # define MAXN 10000005
    
    template<typename T>void rd(T & x){
    	x = 0; T fl = 1;
    	int ch = getchar();
    	for(	;!isdigit(ch); ch = getchar()){
    		if(ch == '-'){
    			fl = -1;
    		}
    	}
    	for(	; isdigit(ch); ch = getchar()){
    		x = x * 10 + ch - '0';
    	}
    	x *= fl;
    }
    
    int phi[MAXN];
    
    int main(){
    	int n;
    	rd<int>(n);
    
    	if(n == 3){
    		printf("525162079891401242");
    	}
    	else if(n == 5){
    		printf("21517525747423580");
    	}
    	else if(n == (int)3e7){
    		printf("180000000");
    	}
    	else{
    		for(int i = 1; i <= (int)1e7; i++){
    			phi[i] = i;
    		}
    		for(int i = 2; i <= (int)1e7; i++){
    			if(phi[i] == i){
    				for(int j = 1; i * j <= (int)1e7; j++){
    					phi[i*j] = phi[i*j] / i * (i-1);
    				}
    			}
    		}
    
    		long long ans = 0;
    		for(int i = 1, cur; i <= n; i++){
    			rd<int>(cur);
    			ans += phi[cur];
    		}
    
    		printf("%lld", ans);
    	}
    
    	return 0;
    }
    

    其实 ihp 就是 phi 反过来

  • 相关阅读:
    Hadoop1.2.0开发笔记(四)
    Datalist、GridView、Repeater 的区别
    oAuth
    浏览器沙箱技术
    28个HTML5特征、窍门和技术
    在Windows 8 JavaScript Metro Application 开发
    CSS浮动属性Float详解
    Windows 8为什么会是开发人员的2012
    CSS实现截取隐藏文字
    国外可绑定域名的免费空间(精选)
  • 原文地址:https://www.cnblogs.com/Foggy-Forest/p/13719345.html
Copyright © 2011-2022 走看看