破解美眉微信号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

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

知识共享署名4.0国际许可协议,转载请保留出处; 部分内容来自网络,若有侵权请联系我:前端学堂 » 破解美眉微信号707829217

赞 (6) 打赏

评论 7

  1. 前端学堂厉害了,回复
  2. 匿名加了可以么?回复
  3. 匿名明显错误回复
  4. 匿名对了么,你乘一下我看看回复
  5. 匿名//点击事件 private void button1_Click(object sender, EventArgs e) { this.shu(); } //找2个数的方法 public void shu() { Int64 c = 0; for (Int64 i = 707829217; i > 1; i--) { for (Int64 j = 1; j <= 707829217; j++) { double a = (double)i /(double)j; string b = a.ToString(); if (b.IndexOf(".")<1) { c = Convert.ToInt64(b); //得到2个相乘的数:j和c if(this.sushu(j)&& this.sushu(c)) { textBox1.Text = j.ToString(); textBox2.Text = c.ToString(); return; } } } } } //验证质数方法 public bool sushu(Int64 num) { for (int i = 2; i < num; i++) { if (num % i == 0) { return false; } } return true; } } }回复

如果对您有帮助,别忘了打赏一下宝宝哦!

支付宝扫一扫打赏

微信扫一扫打赏