zoukankan      html  css  js  c++  java
  • 【HDU4473】Exam(数学题)

    点此看题面

    大致题意:(f(x)=sum[(a*b)|x]),求(sum_{x=1}^nf(x))

    转化题意

    将题意进行转换,我们就可以发现,我们要求的(ans)就是满足(x*y*zle n)的解的个数(这应该还是比较显然的)。

    大致思路

    此题无非就是一个分类讨论

    假设(ale ble c)

    • 当三个数全部相等时,求出的解只有一种排列方式。
    • 当三个数中有两个数相等时,求出的解有三种排列方式。
    • 当三个数互不相等时,求出的解共有六种排列方式。

    按照这种思路,就能很快速地求出答案了。

    注意排除重复的情况。

    代码

    #include<bits/stdc++.h>
    #define LL long long
    using namespace std;
    LL n;
    class Class_MathSolver
    {
    	public:
    		inline void Solve(LL x)
    		{
    			register LL i,j,k,ans=0;
    			for(i=1;i*i*i<=x;++i) ++ans;//对于三数相等的情况,虽然这样慢,但能避免精度误差
    			for(i=1;i*i<=x;++i) if((j=x/(i*i))>=i) ans+=3*(j-1);else ans+=3*j;//对于两数相等的情况,注意不能把三数相等的情况包括在内
    			for(i=1;i*i*i<=x;++i) for(j=i+1;j<=x;++j) if((k=x/(i*j))>=j) ans+=6*(k-j);else break;//对于三数互不相等的情况,同样注意排除重复的情况
    			printf("%lld
    ",ans);
    		}
    }MathSolver;
    int main()
    {
    	register int T=0;
    	while(~scanf("%lld",&n)) printf("Case %d: ",++T),MathSolver.Solve(n);
    	return 0;
    }
    
  • 相关阅读:
    spring三大框架整合
    spring基础内容
    安装Apache报80端口被占用 pid 4
    Bugzilla说明
    管理员权限的用户
    mac怎么连接windows远程桌面
    java化测试神器-流量回放平台
    PyAutoGUI——图形用户界面自动化
    (Python OpenGL)【5】平移 PyOpenGL
    (Python OpenGL)【4】Uniform变量 PyOpenGL
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/HDU4473.html
Copyright © 2011-2022 走看看