需要用C#.net 写一个算法
寻找1000以下的4个素数
这4个素数的的乘积是一个连续的或者相邻两个数字相等的12位数
比如这4个素数的乘积 如果是 111234556678 是对的
如果是 123345667789 也是对的
但如果4个素数的乘积是 123567889724 就不是对的,这样的4个素数就不对,不是我们想要的答案 如果乘积是 123456789879 同样也是不对的
要求考虑performance
请问哪位算法好的高手能给出性能比较好的解决方案么
“连续的或者相邻两个数字相等的”是什么意思。“连续的”这三个字修饰的是”两个数字“还是12位数。
你指的是不是这样的数:这个十二位数的每个位上的数字都不小于其上一位的数字,如果有的话。
111111111111和999999999999这样类似的数符不符合这一个要求。
基本解决方案就是做两个素数表,一个存放1-100的素数,另一个存放100-1000的素数。
然后先把所有符合“连续的或者相邻两个数字相等的12位数”找出来(也就一万个,还是很好盘的)。
如果某个数能被1-100内的数整除,那就肯定不符合要求,不能的话再去判断能不能因式分解成四个100-1000内的素数
时间复杂度是m*n,m是符合要求的12位数的个数,n是1000内的素数个数,空间复杂度是m+n