[水+数学] fzu oj 2193 So Hard and 2191 完美的数字

2193 So Hard

题意:

化简小数。

思路:

最多不超过9位,那么乘以10^9就好了。

然后注意的就是加一下精度。

代码:

#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"queue"#include"algorithm"#include"iostream"#include"map"#define ll __int64#define eps 1e-11using namespace std;ll gcd(ll a,ll b){return b==0?a:gcd(b,a%b);}int main(){int t;cin>>t;while(t–){double x;scanf("%lf",&x);ll fz=(ll)((x+eps)*1000000000);ll fm=1000000000;ll tep=gcd(fz,fm);printf("%I64d/%I64d\n",fz/tep,fm/tep);}return 0;}

2191 完美的数字

题意:

[a,b]区间内每个数的完美度的和。

所谓完美度就是X能够分解成多少个A*A*B(0<A<=B)的个数。

思路:

对于[1,x]区间内。

我们枚举A。

因为A<=B 对于每个i,所以若要成立,最小的数是i*i*i

然而我们只要判断i*i*i<=x 的范围内,包含多少个i*i。

对于每个i*i-i+1。

然后相减一下。

代码:

#include"cstdlib"#include"cstdio"#include"cstring"#include"cmath"#include"queue"#include"algorithm"#include"iostream"#include"map"#define ll __int64#define eps 1e-11using namespace std;int main(){ll x,y;while(scanf("%I64d%I64d",&x,&y)!=-1){ll ansx=0,ansy=0;x–;for(ll i=1;i*i*i<=x;i++) ansx+=x/(i*i)-i+1;for(ll i=1;i*i*i<=y;i++) ansy+=y/(i*i)-i+1;printf("%I64d\n",ansy-ansx);}return 0;}

,走一个地方停一个地方。在我心里最美好的就是和你一起老在路上,

[水+数学] fzu oj 2193 So Hard and 2191 完美的数字

相关文章:

你感兴趣的文章:

标签云: