能量球

能量球

(enb.pas/c/cpp)

题目描述

sideman 有着一个你们所不知道的秘密。实际上,sideman不是地球人,而是遥远的Gliese 行星的生物。sideman 虽然身在地球,但是时刻盼望着能够回到Gliese 去。终于有一天,sideman 得到了几颗蕴含着无数能量的能量球。经过漫长艰苦的研究,sideman 搞清楚了这些能量球的规律。首先,能量球上面有一个正整数N,运用激发手段可以使得能量球上的正整数变为原来的数的一个真因子(A 是B 的一个真因子,等价于B 是A 的整数倍且0<A<B),并且放出单位数量的能量。当然,变为哪一个真因子是可以自由选择的。现在sideman 想知道每颗能量球最多可以放出多少能量,以及有多少种方式达到这个目的(两种操作方式被认为是不同的,当且仅当它们的操作序列中存在不同的真因子)。为了
帮助sideman 返回家乡,这个问题就交给你了。

输入格式

输入文件包含多组测试数据。
每组测试数据包含一个正整数 N,表示要计算的能量球。
输入文件以 EOF 结束。

输出格式

对于每组测试数据,在单独的一行内输出两个正整数,分别表示最多能够放出的能量值
和方案数。

样例输入

2
6

样例输出

1 1
2 2

数据规模及约定

对于30% 的数据,保证N≤1000。
对于 100% 的数据,保证 N≤109,测试数据不多于100 组。

思路

能量球这个题目需要一个组合数公式:

所以知道这个公式是有必要的,这个题运用公式的不同之处就是在于需要算出总的材料(因数)数量ans,然后求它的阶乘,分别将各种因子的数量减一,然后求它们各自的阶乘,把他们作为除数,ans作为被除数进行运算,数字虽然超过了int的范围,但是没有超出long long,所以可以直接运算。
注意求真因子的一个技巧(当然也是必须掌握的)就是循环只需要让N的因子x变化区间控制在x∈[2,√N+1] (x∈N*)(√N+1也可以直接用cmath库里面的ceil函数向上取整),如果从变化区间为x∈[2,N/2] (x∈N*),那么时间复杂度会大幅增加,只拿10^8做例子,同样是查因子,10^4显然比5×10^7更快,而且效果一样。
求完了因子总数量,就需要求ans个数,具体过程第一段已详细说明,不再赘述。

代码

#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
int i,j,m,n,t,xx;
long long sum,temp,ans;
long long a[1000001];
long long mul(long long xx)
{
    long long aans=1;
    for(long long i=2;i<=xx;i++)
    {
        aans*=i;
    }
    return aans;
}


int main()
{
    freopen("enb.in","r",stdin);
    freopen("enb.out","w",stdout);

    while(scanf("%d",&xx)==1)
    {
        memset(a,0,sizeof(a));
        temp=xx;
        for(i=2;i<=ceil(sqrt(xx));i++)
        {
            while(temp%i==0)
            temp/=i,sum++,a[i]++;
        }
        if(temp>1)sum++;
        ans=mul(sum);
        for(i=2;i<=ceil(sqrt(xx));i++)
        if(a[i]>1)
        ans/=mul(a[i]);
        cout<<sum<<" "<<ans<<endl;
        sum=0,ans=0;
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
81、您认为性能测试工作的目的是什么?做好性能测试工作的关键是什么? 82、单元测试、集成测试、系统测试的侧重点是什么? 83、集成测试通常都有那些策略? 84、一个缺陷测试报告的组成 85、基于WEB信息管理系统测试时应考虑的因素有哪些? 86、软件测试项目从什么时候开始,?为什么? 87、需求测试注意事项有哪些? 88、简述一下缺陷的生命周期 89、你在你所在的公司是怎么开展测试工作的?是如何组织的? 90、你认为理想的测试流程是什么样子? 91、您在从事性能测试工作时,是否使用过一些测试工具?如果有,请试述该工具的工作 原理,并以一个具体的工作中的例子描述该工具是如何在实际工作中应用的。 92、软件测试活动的生命周期是什么? 93、请画出软件测试活动的流程图? 94、针对缺陷采取怎样管理措施? 95、什么是测试评估?测试评估的范围是什么? 96、如果能够执行完美的黑盒测试,还需要进行白盒测试吗?为什么? 97、测试结束的标准是什么? 98、软件验收测试除了alpha ,beta测试以外,还有哪一种? 99、做测试多久了?以前做过哪些项目?你们以前测试的流程是怎样的?用过哪些测试工 具? 100、请就如何在开发中进行软件质量控制说说你的看法 101、一套完整的测试应该由哪些阶段组成?分别阐述一下各个阶段。 102、软件测试的类型有那些?分别比较这些不同的测试类型的区别与联系。 103、测试用例通常包括那些内容?着重阐述编制测试用例的具体做法 104、在分别测试winform的C/S 结构与测试WEB结构的软件是,应该采取什么样的方法 分别测试?他们存在什么样的区别与联系?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值