质因数的思维题

Alice and Bob begin their day with a quick game. They first choose a starting number X0?≥?3 and try to reach one million by the process described below.

Alice goes first and then they take alternating turns. In the i-th turn, the player whose turn it is selects a prime number smaller than the current number, and announces the smallest multiple of this prime number that is not smaller than the current number.

Formally, he or she selects a prime p?<?Xi?-?1 and then finds the minimum Xi?≥?Xi?-?1 such that p divides Xi. Note that if the selected prime p already divides Xi?-?1, then the number does not change.

Eve has witnessed the state of the game after two turns. Given X2, help her determine what is the smallest possible starting number X0. Note that the players don‘t necessarily play optimally. You should consider all possible game evolutions.

Input

The input contains a single integer X2 (4?≤?X2?≤?106). It is guaranteed that the integer X2 is composite, that is, is not prime.

Output

Output a single integer — the minimum possible X0.

Examples

Input

Copy

14

Output

6

Input

Copy

20

Output

15

Input

Copy

8192

Output

8191

Note

In the first test, the smallest possible starting number is X0?=?6. One possible course of the game is as follows:

  • Alice picks prime 5 and announces X1?=?10
  • Bob picks prime 7 and announces X2?=?14.

In the second case, let X0?=?15.

  • Alice picks prime 2 and announces X1?=?16
  • Bob picks prime 5 and announces X2?=?20.

题目分析 : 给你一个X2, 让你去寻找一个X0, 并且要求 x0 是最小的,选取的规则是每次选取一个质因数,在变换到X的时候是让其扩大一定的倍数,使其刚好大于等于当前的x

思路分析 :对于我输入的一个X2,我们发现当它的质因数越大时,上一个 x1 可以选取的值就可以越小,因此预处理下每个数最大的质因数就可以了

代码示例 :

#define ll long long
const int maxn = 1e6+5;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;

int f[maxn];

int main() {
    //freopen("in.txt", "r", stdin);
    //freopen("out.txt", "w", stdout);
    int x;
    cin >> x;
    for(int i = 2; i <= 1000000; i++){
        if (!f[i]){
            for(int j = i+i; j <= 1000000; j += i){
                f[j] = i;
            }
        }
        f[i] = i - f[i] + 1;
    }
    //for(int i = 1; i <= x; i++) printf("%d ", f[i]);
    int ans = inf;
    //cout << f[x] << endl;
    for(int i = f[x]; i <= x; i++){
        ans = min(ans, f[i]);
    }
    cout << ans << endl;
    return 0;
}

原文地址:https://www.cnblogs.com/ccut-ry/p/8550514.html

时间: 2024-08-02 02:46:48

质因数的思维题的相关文章

智商的比拼——思维题思考指南

智商的比拼--思维题思考指南 最近做了几道思维题,感觉思维题就是烧脑,而且费劲,而且做不出QAQ!! 思维题可能分一下几个类别吧 鲨壁结论题.神犇之于结论题,如鱼之于水.而我之于结论题,QAQ. 数论大法好.有些题目直接数学建模找结论啊QAQ,就比如[Running]这道题,关键性的东西就是\((a_i,n)|\ l\),实际上这个就是数学建立同余方程然后得出来的一个浅显结论(我找这个"浅显"的结论花了\(30min\) \(QAQ\)). 代数大法好.实际上和前面那个重合了,不过拿出

Unique Encryption Keys (思维题 预处理)

题目 题意:给m个数字, q次询问, 询问b到e之间如果有重复数字就输出, 没有就输出OK 思路:用f[i]数组 记录从i开始向后最近的有重复数字的 位置, 如 1 3 2 2, 则f[1] = 4; 如果离a最近的重复数字的位置 都大于b, 就说明没有重复数字. f[]数组需要预处理,从后向前. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector>

sdut 2847 Monitor (思维题)

题目 题意:给定a, b, x, y;  求使c, d; 使c:d = x :y; 且c<=a, d<=b, 而且c, d尽量大. 先求最小倍数, 再用最小倍数乘 x, y; 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cmath> 5 using namespace std; 6 7 long long gcd(long long a, l

hdu 4972 A simple dynamic programming problem (转化 乱搞 思维题) 2014多校10

题目链接 题意:给定一个数组记录两队之间分差,只记分差,不记谁高谁低,问最终有多少种比分的可能性 分析: 类似cf的题目,比赛的时候都没想出来,简直笨到极点..... 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <vector> 7 #include &

学习方法_2011年编写和锻炼的思维题

1.多看,多练,多想,多总结,最重要就是不停的写代码! 给自己的目标:一天代码量最少800行,无论是什么代码,如果练习的量不够,就重复做已经写过的代码. 思维题: 找出这当中数字 1,11,31,4113,612314 的规律是怎样的? 1,11,表示前面的数有1个131,表示前面所有的数有3个14113,表示前面的所有的数有4个1.1个3以此类推,前面所有的数有6个1.2个3.1个4,即为612314 1.两个无窗的房间,其中一间有三个电灯,另一间里面有三个开关,三个开关各控制三个电灯.问:每

思维题 URAL 1718 Rejudge

题目传送门 1 /* 2 题意:数据加10组,再删掉第6组数据,问rejudge后最少最多几个作者收到邮件 3 思维题:当错在6时结果是不一定,错在7时是一定改变,因为会变成6 4 思路没错,但用结构题排序一直WA,代码有毒!学习使用set容器. 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include <cmath> 10 #include <str

ZOJ 3829 贪心 思维题

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3829 现场做这道题的时候,感觉是思维题,自己智商不够,不敢搞,想着队友智商好,他们搞吧,但是没出来这题...... 以后任何时候,都自信点....该想的还是好好自己想,这类题感觉就是先去找性质,然后一点点找规律,如果必要的话,自己提出一点猜想,然后如果自己举不出来反例,就暂时认为是正确的 下午搞了一下午,发现还是悲剧,晚上参考了两个题解 http://blog.csdn.

ACM: Gym 101047K Training with Phuket&#39;s larvae - 思维题

Gym 101047K Training with Phuket's larvae Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Practice Description standard input/output Thai cuisine is known for combining seasonings so that every dish has flavors that are s

Acdreamoj1115(数学思维题)

题意:1,3是完美数,如果a,b是完美数,则2+a*b+2*a+2*b,判断给出的n是否是完美数. 解法:开始只看出来2+a*b+2*a+2*b=(a+2)*(b+2)-2,没推出更多结论,囧.没办法,只能暴力将所有的完美数求出来然后查表.正解是c+2=(a+2)*(b+2);完美数都是有质因子3或5组成的(5本身除外): 自己暴力代码: /****************************************************** * author:xiefubao *****