破解美眉微信号707829217

题目-破解美眉微信号

土生土长的北京妞儿,在胡同里长大,房不多,就一个四合院和近郊的别墅。不算美如天仙但还算标致,在清华读的经管,现在在做基金经理(不想被人肉,就不暴露单位啦),个人擅长基本面分析,价值投资。现在只想找个聪明靠谱的IT男。硬性要求是年龄,不要超过88年,还有不要特别矮或胖。 我对智商的要求比较高,下面就出个题测试下。我的微信ID是大写字母NY后面跟着两个质数,大的在前,小的在后,乘积是707829217,可直接搜索添加,另外还有个附加题目,在刚刚微信ID的数字中,从1开始到这个数字的奇数序列里,一共出现了多少个3,如果私信我正确的答案,我将直接邀你见面!期待缘分降临~

美眉的微信号是NY后面跟两个质数,大的质数在前,小的在后。两个质数乘积是707829217,求美眉的微信号是多少?

数学知识

质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数参考百科

就是只能被1和自身整除,不能被其他数字整除。

简单推理:

    一个数n若可以进行因数分解,那么分解时得到的两个数一定是一个小于等于sqrt(n)(平方根),一个大于等于sqrt(n),据此,上述代码中并不需要遍历到n-1,遍历到sqrt(n)即可,因为若sqrt(n)左侧找不到约数,那么右侧也一定找不到约数。

分析

上面这个数学知识,很重要,在判断是否是质数的时候,只要找 这个数字平方根 之前的数是否可以整除就好了。大大提升了效率。

Just Try

请你自动动手试一下:在线编程环境

想想有没有其他思路?

想想时间和空间复杂度,能否优化一下

真的做不到么?

let you think, think makes you happy!

参考答案

function isPrime(num){
  for(let i=2; i< Math.sqrt(num);i++){
    if(num%i == 0) return false;
  }
  return true;
}
function algorithm(n){
  for(let i=0; i< Math.sqrt(n);i++){
    if(isPrime(i) && (n%i==0) && isPrime(n/i)) return [i, n/i].join("")
  }
  return "";
}
function main(...param) {
  console.show("参数:" + param, "结果:" + algorithm(param))
  testPerformance(algorithm, param)
}
main(707829217);

结果是:8171 * 86627,微信号是:NY866278171

请你自动动手试一下:在线编程环境



请遵守《互联网环境法规》文明发言,欢迎讨论问题
扫码反馈

扫一扫,反馈当前页面

咨询反馈
扫码关注
返回顶部