任意整数能否修改O(1)位变成质数
如果只允许修改最低若干位,那么由质数分布可知,需要修改log n=log log x位。但若允许修改任意位置,则常数个修改可能足够。1. 是否足够?
2. 能否找到修改2位(或以内)不足以变成质数的例子? 以下数字修改1位不足以变成质数:
200
320
510
530
620
840
890 首先,需要明确:修改后的数,位数不能大于之前的位数吧?
也即:修改的数字,必须在原数的最低位与最高位之间。
比如,不允许出现:将 “321”修改成“400321”这种情形。 再你说一个数是素数之前,你总得判定吧?
判定都是一个很难的事! gxqcn 发表于 2022-10-27 13:27
首先,需要明确:修改后的数,位数不能大于之前的位数吧?
也即:修改的数字,必须在原数的最低位与最高位 ...
应该是从一个n位数到另一个n位数,只是改变一两个数位上的数 如果不局限于10进制的话,建议先在二进制下试着找反例 7位? gxqcn 发表于 2022-10-27 14:30
如果不局限于10进制的话,建议先在二进制下试着找反例
在2^24内搜索结果
修改4位及以上 0
修改3位 545773
修改2位 7310737
修改1位 7842833
修改0位 1077871
nodejs代码
A=[...Array(16777216)].map((_,i)=>i);A=A=1/0;for(i=2;i<16777216;++i)if(A<1e9)for(j=i+i;j<16777216;j+=i)A=Infinity;0
F=0;for(p=1;p<16777216;p+=p)for(i=p;i<p+p;++i)for(j=p;j>>=1;)if(A>A+1e9)++F,A=A+1e9;F // until F=0
范围2^31,修改位数/fail数量
0 2042386083
1 1045197146
2 76552887
3 2 (就是0和1不能改位数)