阶乘除法(很久之前的一道题,感觉挺好的,遂记录之)

题目描述:

F:阶乘除法

输入两个整数n,m 输出n!/m!

是不是很简单?现在我们把问题反过来,输入k=n!/m! 找到这样的整数二元组(n,m)

因为答案不唯一,n应该尽可能小。

输入:

K(1<=k<=100000000)

输出

输出n和m,无解输出”Impossible”

样例

120

1

210

Case 1: 5 1

Case 2: Impossible

Case 3:7 4

题解:这个题不能用乘法做是肯定的,但是怎么用别的方法做呢,我们就想如果 k = t1*t2*t3....*ti,那么t1 t2 ..ti 肯定是连续的。

于是乎我们就想用 枚举 FOR i 1-k ,然后再每次用 k 去除序列中的每个数,如果k%i ==0 就继续除,一直到 k=1为止,如果一直到最后k!=1

那么 n = k ,m = k-1 (k!=1) 但是,k的范围是 1-10^9 ,枚举肯定不现实,那么我们有没有可能缩小这个范围呢?我们发现 如果 t1 = sqrt(k)

那么 t1*t2 = k+sqrt(k)>k ,于是乎 k 的范围被我们成功的缩小到了 10^4.5次方,接下来写程序就不是问题了.

#include <iostream>
#include <stdio.h>

using namespace std;

int main(){
    int tcase,t=1;
    int k,n,m;
    while(scanf("%d",&k)!=EOF){
        if(k==1){
            printf("Case %d: Impossible\n",t++);
            continue;
        }
        int flag=1;
        for(int i=1;i*i<k;i++){///枚举m
            int temp = k;
            int num = i;
            while(temp%num==0){
                temp/=num;
                num++;
            }
            if(temp==1){
                flag=0;
                n=num-1;
                if(i!=1) m=i-1;
                else m=1;
                break;
            }
        }
        if(flag){
            n=k,m=k-1;
        }
        printf("Case %d: %d %d\n",t++,n,m);
    }
}
时间: 2024-11-05 11:55:31

阶乘除法(很久之前的一道题,感觉挺好的,遂记录之)的相关文章

2015湖南省省赛 阶乘除法 暴力

阶乘除法 Time Limit:5000MS     Memory Limit:65535KB     64bit IO Format: NBUT 1643 Description 输入两个正整数 n, m,输出 n!/m!,其中阶乘定义为 n!= 1*2*3*...*n (n>=1). 比如,若 n=6, m=3,则 n!/m!=6!/3!=720/6=120. 是不是很简单?现在让我们把问题反过来:输入 k=n!/m!,找到这样的整数二元组(n,m) (n>m>=1). 如果答案不唯

很久没这么充实过了

不知道为什么今晚突然想写点什么,也许是因为 很久没这么充实过了. 学习iOS已经有几天了.花了一个小时复习了下c语言指针,两个晚上看了下oc的基础,oc的加强暂时没看,然后迫不及待点开始看ui了.现在已经能做点简单的小demo了.我知道我现在接触到的都是最简单的,后面还有很多很多复杂的东西等着我来学.但不管我学的如何,此刻这种充实的生活对我而言意义更为重大. 有了目标后的生活,发现时间真的不够用,然后不由感慨自己曾经真的浪费了很多宝贵时间.希望能一直保持这样的状态. 再也不想把时间浪费在一些无意

来了很久今天才想到写博客

来了很久今天才想到写博客.以后会常来记录自己的学习心得.

fsck害了我很久了,必须关掉,因为他每次打卡都要推迟数十分钟。

http://crashmag.net/disable-filesystem-check-fsck-at-boot-time Disable the filesystem check (fsck) at boot time ?11/08/2012 ?crashmag    ?Leave a comment There’s several ways of accomplishing this. I will list all the methods beneath, just pick the o

使用Fragment应用放置后台很久,被系统回收,出现crash

使用Fragment应用放置后台很久,被系统回收,出现crash:原因:系统做了源码FragmentActivity调用onSaveInstanceState保存Fragment对象,这时候系统恢复保存的Fragment,但是在FragmentActivity重新执行生命周期的时候,我们重新生成了fragment对象附加到该FragmentActivity,系统恢复的fragment和activity失去关联,出错:处理:方法1.在fragmentActivity里oncreate方法判断sav

linux如何再次运行那个很久之前曾用过的命令---历史命令搜索方法

linux shell命令一般附带很多参数,如果你现在想运行一个很久之前用过的命令,但当时用的参数怎么也技艺不起来了,怎么办?如果用上箭头向前翻动会累死驴的吆!万能的linux真是太方便了,一行命令搞定: $history | grep 命令名字参数等你能记忆到的字符串

java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了

原文:java实现的图片缩放 压缩 裁剪工具!找了很久,市面上再也找不到比它缩放效果还好的代码了 源代码下载地址:http://www.zuidaima.com/share/1550463380458496.htm 纯 java 实现的 图片缩放 压缩 裁剪工具!不依赖任何第三方 jar 包 1. 找了很久,市面上再也找不到比它缩放效果还好的代码了 (再不使用任何第三方组件的前提下) 2. 支持缩放 3. 支持剪切 (例如:用户上传头像后剪切成正方形小图) /* * Copyright 2012

解决ssh连接慢,挂起在SSH2_MSG_SERVICE_ACCEPT信息之后很久的问题

问题现象:无论是ssh 还是 scp 都会连接很久才提示输认证信息(注意:是连接慢) 如本机IP:192.168.18.208 (Hostname: ThinkPad) 目标主机:192.168.18.100 通过添加 -v 参数(ssh -v [email protected] | scp -v file [email protected]:/tmp/)发现到SSH2_MSG_SERVICE_ACCEPT一行时会停留很久,不少于20s 网上给的解决方法大致有三种: 1)由于GSSAPI认证导致

很久没写博客了!今天来写个八方向摇杆基于quick cocos2d

首先!马上毕业了最近在找工作,还算有点时间好久没写东西了就写点东西吧! 进入主题,首先先思考算法和逻辑.把圆分为八块,每块45度.正上,正下,正左,正右会被X和Y 平分.一边一半各是22.5度.(PS:开始想用 斜率的,但是发现斜率是tan的图像,也就是无限趋近最大值和最小值的不好做判断最后就用了cos也可用sin)思考计算的过程图如下: 准备工作完了就开始,首先控制的人物有八个状态分别是:上,下,左,右,左上,左下,右上,右下的动画.不同的状态对应着不同的动画,触控点和圆心点作比较来判断是哪个