• poj2917


    要求

    [frac{1}{x} +frac{1}{y} = frac{1}{n} \ ]

    x,y,n都是正整数,且x<=y的(x,y)解数

    [egin{align} frac{1}{x} +frac{1}{y} &= frac{1}{n} \ n(x+y) &=xy \ end{align} ]

    显然x,y均大于n
    设 x=n+a,y=n+b

    [n^2=ab ]

    所以答案就是(a,b)的对数

    设P为n的约数个数,因为x<=y,所以答案为(p+1)/1
    若p为偶数,则答案为p/2,否则为(p+1)/2,所以就是(p+1)/2
    n<=1e9,但是n最大质因子<=1e5
    那么根据算术基本定理,n^2的可以从n来计算

    int v[100007], prime[100007], cnt;
    inline void Euler_Sieve(int mx) {
    	rep(i, 2, mx) {
    		if(!v[i]) {
    			v[i] = i;
    			prime[++cnt] = i;
    		}
    		rep(j, 1, cnt) {
    			if(prime[j] > v[i] || 1ll * prime[j]*i > mx) break;
    			v[i * prime[j]] = prime[j];
    		}
    	}
    }
    inline lxl calc(lxl n) {
    	lxl ans(1);
    	rep(i, 1, cnt) {
    		lxl c(0);
    		while(n % prime[i]==0) {
    			n /= prime[i];
    			++c;
    		}
    		ans *= (2 * c + 1);
    	}
    	if(n > 1) ans = (ans << 1) + ans;
    	return ans;
    }
    
    int main() {
    	lxl T,n;
    	cin>>T;
    	Euler_Sieve(100000);
    	rep(p, 1, T) {
    		cin>>n;
    		lxl res = calc(n);
    		printf("Scenario #%d:
    %lld
    
    ", p, (res + 1) / 2);
    	}
    	return 0;
    }
    

    本文来自博客园,作者:{2519},转载请注明原文链接:https://www.cnblogs.com/QQ2519/p/15547376.html

  • 相关阅读:
    这几天都是在公司慢待
    电脑没有关机可能出现发博文dns异常(write)
    DOS/VBS
    SourceInsight
    CevaEclipse
    C/C++
    Matlab
    Matlab
    C语言
    Matlab
  • 原文地址:https://www.cnblogs.com/QQ2519/p/15547376.html
Copyright © 2020-2023  润新知