zoukankan      html  css  js  c++  java
  • 紫书 例题 10-7 UVa 10820 (欧拉函数)

    这道题要找二元组(x, y) 满足1 <= x, y <= n 且x与y互素

    那么我就可以假设x < y, 设这时答案为f(n)

    那么答案就为2 * f(n) +1(x与y反过来就乘2,加上(1,1))

    那么f(n)可以用欧拉函数求

    显然f(n) = phi(2) + phi(3) + ……+phi(n)

    #include<cstdio>
    #define REP(i, a, b) for(int i = (a); i < (b); i++)
    using namespace std;
    
    const int MAXN = 51234;
    int euler[MAXN], ans[MAXN], n;
    
    void init()
    {
    	REP(i, 1, MAXN) euler[i] = i;
    	REP(i, 2, MAXN)
    		if(euler[i] == i)
    			for(int j = i; j < MAXN; j += i)
    				euler[j] = euler[j] / i * (i - 1);
    	REP(i, 2, MAXN) ans[i] = ans[i-1] + euler[i];
    }
    
    int main()
    {
    	init();
    	while(~scanf("%d", &n) && n) 
    		printf("%d
    ", ans[n] * 2 + 1);
    	return 0;
    }
    

  • 相关阅读:
    优化-IO
    优化-cpu
    优化-内存
    系统优化
    snort -- 入侵检测系统
    tripwire--入侵检测系统
    sudo
    selinux
    pptpd
    C++ 内联函数
  • 原文地址:https://www.cnblogs.com/sugewud/p/9819512.html
Copyright © 2011-2022 走看看