精华内容
下载资源
问答
  • 记录一次有趣的算法题。 土生土长的北京妞儿,在胡同里长大,房不多,就一个四合院和近郊的别墅。不算美如天仙但还算标致,在清华读的经管,现在在做...我的微信ID是大写字母NY后面跟着两个质数,大的在前,小的在...

    记录一次有趣的算法题。
    在这里插入图片描述

    土生土长的北京妞儿,在胡同里长大,房不多,就一个四合院和近郊的别墅。不算美如天仙但还算标致,在清华读的经管,现在在做基金经理(不想被人肉,就不暴露单位啦) ,个人擅长基本面分析,价值投资。现在只想找个聪明靠谱的IT男。硬性要求是年龄,不要超过88年,还有不要特别矮或胖。我对智商的要求比较高,下面就出个题测试下。

    我的微信ID是大写字母NY后面跟着两个质数,大的在前,小的在后,乘积是707829217,可直接搜索添加,另外还有个附加题目,在刚刚微信ID的数字中,从1开始到这个数字的奇数序列里,一共出现了多少个3,如果私信我正确的答案,我将直接邀你见面!期待缘分降临~

    问题1 求解微信号

    	// 两个质数的乘积是707829217,求质数
    	int num = 707829217;
    	int i = 1;
    	while (i <= num) {
    		i += 2;
    		if (num % i == 0) {
    			System.out.println("发现: " + num + " / " + i + " = " + (num / i));
    		}
    	}
    

    打印结果:

    发现: 707829217 / 8171 = 86627
    发现: 707829217 / 86627 = 8171
    发现: 707829217 / 707829217 = 1
    
    Process finished with exit code 0
    

    所以我们得到第一问的答案:NY866278171

    问题2 求解奇数序列中,3出现的次数

    我们看到这个数值866278171,为8亿多,去掉偶数,只看奇数,也有4亿多。

    问这4亿个数中3出现了多少次,这个问题有点费解。

    方式一 暴力破解

    所谓暴力破解,就是遍历每一个数值,统计3出现的次数。下面的各个版本仅供参考:

    该方案耗时:2m 52s 139ms

            // 奇数序列中,一共出现了多少次3
            int number = 866278171;
            int sum = 0;
            for (int i = 1; i <= number; i = i + 2) {
                sum += String.valueOf(i).replace("3", "_#_")
                        .split("#")
                        .length - 1;
            }
            // 总数: 441684627
            System.out.println("总数: " + sum);
    

    该方案耗时:1m 41s 259ms

            // 奇数序列中,一共出现了多少次3
            int number = 866278171;
            int sum = 0;
            for (int i = 1; i <= number; i = i + 2) {
                String str = String.valueOf(i);
                if (str.contains("3")) {
                    sum += str.length() - str.replace("3", "").length();
                }
            }
            // 总数: 441684627
            System.out.println("总数: " + sum);
    

    该方案耗时:22s 942ms

            // 奇数序列中,一共出现了多少次3
            int number = 866278171;
            int sum = 0;
            for (int i = 1; i <= number; i = i + 2) {
                String str = String.valueOf(i);
                for (int j = 0; j < str.length(); j++) {
                    if (str.charAt(j) == '3') {
                        sum++;
                    }
                }
            }
            // 总数: 441684627
            System.out.println("总数: " + sum);
    

    该方案耗时:6s 669ms

            // 奇数序列中,一共出现了多少次3
            int number = 866278171;
            int sum = 0;
            for (int i = 1; i <= number; i = i + 2) {
                int k = i;
                while (k > 1) {
                    if (k % 10 == 3) {
                        sum++;
                    }
                    k /= 10;
                }
            }
            // 总数: 441684627
            System.out.println("总数: " + sum);
    

    我们看到,走了好多的弯路,String类中的replacecontains都是重量级方法。当我们使用有限次数时,并不会感觉到慢。但是当我们需要重复执行上亿次时,就很慢了。

    方式二 公式法

    规律总结

    • 对于1位数
    3只出现1次。
    
    • 对于2位数:
    3出现在个位数,十位数可以任意0-9,有10种。33暂时算一次
    3出现在十位数,个位数可以任意0-9,有10种,33暂时算一次,加上上一次的补齐
    所以,对于任意两位数,3出现了20次。
    
    • 对于3位数:
    3出现在个位数,十位数、百位数 可以任意00-99,有100种。 x33、3x3、333暂时算一次
    3出现在十位数,个位数、百位数 可以任意00-99,有100种。 x33、33x、333暂时算一次 
    3出现在百位数,个位数、十位数 可以任意00-99,有100种。 3x3、33x、333暂时算一次 
    少算的,都补齐了,所以,对于任意3位数,3出现了300次。
    
    • 对于4位数:
    3出现在个位数,十位数、百位数、千位数 可以任意000-999,有1000种。
    xx33、x3x3、3xx3、x333、33x3、3x33、3333暂时算一次
    3出现在十位数,个位数、百位数、千位数 可以任意000-999,有1000种。 
    xx33、x33x、3x3x、x333、3x33、333x、3333暂时算一次
    3出现在百位数,个位数、十位数、千位数 可以任意000-999,有1000种。 
    x3x3、x33x、33xx、x333、33x3、333x、3333暂时算一次
    3出现在千位数,个位数、十位数、百位数 可以任意000-999,有1000种。 
    3xx3、3x3x、33xx、3x33、33x3、333x、3333暂时算一次
    少算的,都补齐了,所以,对于任意4位数,3出现了4000次。
    

    好像有点规律了。。

    对于任意N位数,3出现的次数为 n * 10^(n-1)

    翻译成代码:

        /**
         * 任意N位数,3出现的次数
         */
        public double anyN(int n) {
            if (n < 1)
                return 0;
            return n * Math.pow(10, n - 1);
        }
    

    问题来了,对于一个有限度的N位数,3出现了多少次?

    比如: 0 ~ 2918,3出现了多少次?
    
    拆分下:
    0 ~ 2000区间段,
    可以理解为2个1000,也就是2个任意3位数,所以 :2 * 300 + 0 (对于任意3位数3出现的次数为300,不包含3000~3999 整个以3开头的千位数)
    2000 ~ 2900区间段,
    可以理解为9个100,也就是9个任意2位数,所以:9 * 20 + 100( 任意2位数3出现的次数为20,包含300-399 整个以3开头的百位数)
    2900 ~ 2910区间段,
    可以理解为1个10,也就是1个任意1位数,所以:1 * 1 + 0( 任意1位数3出现的次数为1,不包含30-39 整个以3开头的十位数)
    2910 ~ 2918区间段,
    只看个位数,0 ~ 8,包含一个3,所以: 1
    综合起来就是:
    (2 * 300 + 0)+(9 * 20 + 100) + (1 * 1 + 0)  + (1)= 600+280+1+1 = 882
    

    我们拆开翻译,

    • 步骤1

    对于0 ~ n * 10^w 的数,3出现了多少次。
    比如0~100,0~4000,0~800000000

        /**
         * 计算一个 [ 0 , n*10^w ) 的数中,3出现的次数
         * <p>
         * e.g:  4000  n = 4 , w = 3
         *
         * @param n 数值
         * @param w 0的个数
         * @return
         */
        public int count3(int n, int w) {
            // n * 10^(w-1) + 10^w
            double sum = n * anyN(w);
            if (n > 3) {
                sum += Math.pow(10, w);
            }
            return (int) sum;
        }
    
    • 步骤2

    对于任意0 ~ N, 3出现了多少次

        /**
         * 计算0~N的数中,3出现的次数
         */
        public int anyNumCount3(int anyN) {
            double sum = 0;
            int number = anyN;
            int count0 = 0;
            while (number > 1) {
                int n = number % 10;
                sum += count3(n, count0);
                if (n == 3) {
                    // 如果该位为3,需要将低位数再加一遍。
                    // 比如 389,[300,389]共89+1=90个
                    sum += (anyN % Math.pow(10, count0)) + 1;
                }
                number /= 10;
                count0++;
            }
            return (int) sum;
        }
    

    该方案耗时:1ms ?

    至此,我们通过找规律,发现了对于[0~N]中3出现的次数的公式。

    只看奇数序列

    针对本题的只看奇数序列,我们总结下规律:

    奇数,也就是限定了个位数只能是1、3、5、7、9共5种选择,而更高位可以是0-9共十种选择。

    对于任意N位奇数

    • 对于1位数
    3只出现1次。
    
    • 对于2位数:
    3出现在个位数,十位数可以任意0-9,有10种。33暂时算一次
    3出现在十位数,个位数可以是13579,有5种,33暂时算一次,加上上一次的补齐
    所以,对于任意两位数,3出现了15次。
    
    • 对于3位数:
    3出现在个位数,十位数0-9、百位数0-9,有10*10=100种。 x33、3x3、333暂时算一次
    3出现在十位数,百位数0-9,个位13579,有10*5=50种。 x33、33x、333暂时算一次 
    3出现在百位数,十位数0-9,个位13579,有10*5=50种。 3x3、33x、333暂时算一次 
    少算的,都补齐了,所以,对于任意3位数,3出现了200次。
    
    • 对于4位数:
    3出现在个位数,十、百、千位数 可以任意0-9,有1000种。
    xx33、x3x3、3xx3、x333、33x3、3x33、3333暂时算一次
    3出现在十位数,个位13579、百、千位数 可以任意0-9,有500种。 
    xx33、x33x、3x3x、x333、3x33、333x、3333暂时算一次
    3出现在百位数,个位13579、十、千位数 可以任意0-9,有500种。 
    x3x3、x33x、33xx、x333、33x3、333x、3333暂时算一次
    3出现在千位数,个位13579、十、百位数 可以任意0-9,有500种。 
    3xx3、3x3x、33xx、3x33、33x3、333x、3333暂时算一次
    少算的,都补齐了,所以,对于任意4位数,3出现了2500次。
    

    规律:对于任意N位数,只看奇数,3出现的次数为1*10^(n-1) + (n-1)*5*10^(n-2)

    翻译成代码:

        /**
         * 任意N位奇数,3出现的次数
         * e.g: 9999 n = 4
         */
        public int anySingleN(int n) {
            // 1*10^3 + 3*5*10^2
            if (n < 1) return 0;
            double sum = Math.pow(10, n - 1);
            if (n >= 2) {
                sum += (n - 1) * 5 * Math.pow(10, n - 2);
            }
            return (int) sum;
        }
    

    对于有限制的N位奇数,3出现的次数

    • 比如:4000以内的奇数

    4个任意三位奇数 + 3开头的,任意4位奇数。即4*anySingleN(3) + 10*10*5

    翻译成代码:

        /**
         * 计算一个 [ 0 , n*10^w ) 的奇数中,3出现的次数
         * <p>
         * e.g:  4000  n = 4 , w = 3
         *
         * @param n 数值
         * @param w 0的个数
         * @return
         */
        public int countSingle3(int n, int w) {
            // 4 * anySingleN(3) + 5*10^2
            if (w < 1)// 个位数
                return (n >= 3) ? 1 : 0;
            double sum = n * anySingleN(w);
            if (n > 3) {
                sum += 5 * Math.pow(10, w - 1);
            }
            return (int) sum;
        }
    
    • 对于0~N的任意奇数中,3出现的次数
        /**
         * 计算0~N的奇数数中,3出现的次数
         */
        public int anySingleNumCount3(int anyN) {
            int sum = 0;
            int number = anyN;
            int count0 = 0;
            while (number > 0) {
                int n = number % 10;
                sum += countSingle3(n, count0);
                if (n == 3) {
                    // 如果该位为3,需要将低位奇数再加一遍
                    // 比如 389,[300-389]共(89+1)/2 = 50个
                    sum += (anyN % Math.pow(10, count0) + 1) / 2;
                }
                number /= 10;
                count0++;
            }
            return (int) sum;
        }
    

    该方案耗时:1ms ?

    至此,我们通过找规律,发现了对于[0,N]奇数序列中3出现的次数的公式。

    总结

    我们通过 方案一 暴力破解方案二 公式法 来解决了这个问题。

    速度对比那就更不用说了

    展开全文
  • 撰文丨范桁中国科学院物理研究所人类历史上建造了各种运行模式各异的计算...这样人们就提出一个疑问,量子计算机据称可以轻松分解两个质数乘积,那么其背后的数学是什么呢?知道一个大数是两个质数乘积,求出...

    撰文丨范桁中国科学院物理研究所

    人类历史上建造了各种运行模式各异的计算机器,例如几十年前还在经常使用的计算尺,在中国普遍使用的算盘,当然也有计算机等不一而足。但是我们知道不管其运行模式如何,背后的数学必须是对的,比如算盘里二一添作五,三一三剩一这样的口诀,列为计算式也是对的。这样人们就提出一个疑问,量子计算机据称可以轻松分解两个质数的乘积,那么其背后的数学是什么呢?

    549d500eaa6a8f432c47329445f21e3b.png

    知道一个大数是两个质数的乘积,求出具体两个质数,这样的大数分解问题是一个难的问题,但是把两个质数乘起来就简单很多,比如n=10,104,547是两个质数p,q的乘积,把n分解为2789和3623这两个质数,比起把它们乘起来就耗时很多。RSA公钥密码系统的安全性就是基于这样的原理,这个系统在银行和互联网是广泛使用的,其运行原理是基于所谓的费马小定理和欧拉定理,这里就不展开了。那么量子计算机是怎样分解两个质数的乘积呢?

    b6d6bca33c4c67ed92ea2f381d2b8b52.png

    张益唐是世界知名的科学家,他把孪生子质数问题推进了许多,孪生子质数是指两个质数只相差2,是紧挨着的,比如3和5, 11和13, 641和643等。张益唐证明相差在7000万之内的一对质数是无穷多的,很快大家就把这个距离缩减到百量级,而原始的问题是能否证明孪生子质数是无穷多的,当然我们这里的空间太小,不可能证明孪生子质数问题。还是回到大数分解问题,我们假设两个质数是孪生子质数,我们会知道他们的乘积可以写为(x+1)(x-1)=x2-1的形式,那分解它们的积就是一个简单的问题,比如可以解 x2-1=n这个式子就可以, 例如143的分解可以用143+1再开根号计算,得到x=12,这个数字加减1就可以得到11和13这两个质数。

    在运行RSA密码系统中,加密和解密的计算都需要用到求n的模,即所有的数字都限制在n之内,超出了就减去n的倍数,比如14=1(mod 13), 就是指如果取13的模,14就等于1,同样15就等于2,也可以13和26就等于0。

    这样的话 x2-1=n如果取n的模,就可以写为,x2-1=0 (mod n)。量子计算机就是利用这样的性质来进行计算的。具体来说,我们发现x, 然后求x+1, x-1与n的最大公约数就能求得两个质数p和q。因为(x+1)(x-1)就是pq的倍数,那么x+1和x-1就是p或者q的倍数了。当然需要指出x=1是一个解,不过是平庸的。

    比如分解21,可以发现 82=64=1+3×21=1(mod 21), 那么8加减1就是7和9, 用7和9去求和21的最大公约数得到7和3, 我们知道答案21=7×3.

    我们也可以试一下n=10,104,547,可以发现 59851592=n×3545192+1,用x解加减1与n求最大公约数就可以得到两个质数。

    当然问题是,是否所有的n=p×q都可以用这样的方法求解,是可以的,这是由欧几里得定理保证的,就是所谓的辗转相除法。

    a24562ab32eda75b004eabb4374d7568.png

    那么量子算法具体怎么操作呢,P.Shor指出可以随便找个y, 然后求y的幂次,多求几次,我们会发现,满足 yr=1 (mod n), 而r又是偶数的概率大于50%。我们已经指出当r是偶数2m的时候,x=ym就是我们要求的方程的解。具体来讲量子计算机可以对y同时执行从0到一个比较大数字N做幂次,因为yr=1 (mod n)成立,所以幂次是按照r这个周期进行循环的,发现这个周期就成功分解了n。

    以上没有任何量子的东西存在,只是说有一种算法,可以分解大数n, 而这个算法对量子计算机来说是容易的,就如同二一添作五对算盘是容易的一样,但是经典计算机是不是也可以这样做呢,当然是可以的,只是经典计算机这样做难度和直接分解n的难度是一样的,这在RSA原始的文献里就已经指出了。

    以上内容在“云里悟理”讲座 “从量子计算机分解21=3×7说开去”有更详细的展示。

    作者简介|范桁

    1ee86e33c1b4d4f4f7b089693f5a2df2.png

    范桁,中国科学院物理研究所研究员,博士生导师,固态量子信息与计算实验室主任,课题组长,从事量子计算与量子信息理论与实验研究,近年特别致力于以多量子比特为特征,模拟诸如凝聚态多体物理、场论与统计等方面的研究,也涵盖量子算法实现、量子机器学习、量子化学模拟等内容。

    每次读到RSA密码系统、Shor算法内容时,都有种感觉,简单的数字、神奇的数学、竟然还这么有用,这些内容对量子计算的研究者是基础内容,在此与大家分享。

    特别声明:以上文章内容仅代表作者本人观点,不代表新浪网观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与新浪网联系。

    展开全文
  • 撰文丨范桁 中国科学院物理研究所人类历史上建造了各种运行模式各异的计算机器...这样人们就提出一个疑问,量子计算机据称可以轻松分解两个质数乘积,那么其背后的数学是什么呢?知道一个大数是两个质数乘积,求...

    撰文丨范桁 中国科学院物理研究所

    人类历史上建造了各种运行模式各异的计算机器,例如几十年前还在经常使用的计算尺,在中国普遍使用的算盘,当然也有计算机等不一而足。但是我们知道不管其运行模式如何,背后的数学必须是对的,比如算盘里二一添作五,三一三剩一这样的口诀,列为计算式也是对的。这样人们就提出一个疑问,量子计算机据称可以轻松分解两个质数的乘积,那么其背后的数学是什么呢?

    e8d46d95e41077e0d8b77354588581e4.png

    知道一个大数是两个质数的乘积,求出具体两个质数,这样的大数分解问题是一个难的问题,但是把两个质数乘起来就简单很多,比如n=10,104,547是两个质数p,q的乘积,把n分解为2789和3623这两个质数,比起把它们乘起来就耗时很多。RSA公钥密码系统的安全性就是基于这样的原理,这个系统在银行和互联网是广泛使用的,其运行原理是基于所谓的费马小定理和欧拉定理,这里就不展开了。那么量子计算机是怎样分解两个质数的乘积呢?

    761c2623673fc0796100314de9e8f6f6.png

    张益唐是世界知名的科学家,他把孪生子质数问题推进了许多,孪生子质数是指两个质数只相差2,是紧挨着的,比如3和5, 11和13, 641和643等。张益唐证明相差在7000万之内的一对质数是无穷多的,很快大家就把这个距离缩减到百量级,而原始的问题是能否证明孪生子质数是无穷多的,当然我们这里的空间太小,不可能证明孪生子质数问题。还是回到大数分解问题,我们假设两个质数是孪生子质数,我们会知道他们的乘积可以写为(x+1)(x-1)=x2-1 的形式,那分解它们的积就是一个简单的问题,比如可以解 x2-1=n 这个式子就可以, 例如143的分解可以用143+1再开根号计算,得到x=12,这个数字加减1就可以得到11和13这两个质数。

    在运行RSA密码系统中,加密和解密的计算都需要用到求n的模,即所有的数字都限制在n之内,超出了就减去n的倍数,比如14=1(mod 13), 就是指如果取13的模,14就等于1,同样15就等于2,也可以13和26就等于0。

    这样的话 x2-1=n 如果取n的模,就可以写为,x2-1=0 (mod n)。量子计算机就是利用这样的性质来进行计算的。具体来说,我们发现x, 然后求x+1, x-1与n的最大公约数就能求得两个质数p和q。因为(x+1)(x-1)就是pq的倍数,那么x+1和x-1就是p或者q的倍数了。当然需要指出x=1是一个解,不过是平庸的。

    比如分解21,可以发现 82=64=1+3×21=1(mod 21), 那么8加减1就是7和9, 用7和9去求和21的最大公约数得到7和3, 我们知道答案21=7×3.

    我们也可以试一下n=10,104,547,可以发现 59851592=n×3545192+1 ,用x解加减1与n求最大公约数就可以得到两个质数。

    当然问题是,是否所有的n=p×q都可以用这样的方法求解,是可以的,这是由欧几里得定理保证的,就是所谓的辗转相除法。

    392b506f76722f0a85faade88036b01e.png

    那么量子算法具体怎么操作呢,P.Shor指出可以随便找个y, 然后求y的幂次,多求几次,我们会发现,满足 yr=1 (mod n) , 而r又是偶数的概率大于50%。我们已经指出当r是偶数2m的时候,x=ym 就是我们要求的方程的解。具体来讲量子计算机可以对y同时执行从0到一个比较大数字N做幂次,因为yr=1 (mod n)成立,所以幂次是按照r这个周期进行循环的,发现这个周期就成功分解了n。

    以上没有任何量子的东西存在,只是说有一种算法,可以分解大数n, 而这个算法对量子计算机来说是容易的,就如同二一添作五对算盘是容易的一样,但是经典计算机是不是也可以这样做呢,当然是可以的,只是经典计算机这样做难度和直接分解n的难度是一样的,这在RSA原始的文献里就已经指出了。

    以上内容在“云里悟理”讲座 “从量子计算机分解21=3×7说开去”有更详细的展示。

    作者简介|范桁

    13ffc9836b2db3bb8f788e4ff4533d4e.png

    范桁,中国科学院物理研究所研究员,博士生导师,固态量子信息与计算实验室主任,课题组长,从事量子计算与量子信息理论与实验研究,近年特别致力于以多量子比特为特征,模拟诸如凝聚态多体物理、场论与统计等方面的研究,也涵盖量子算法实现、量子机器学习、量子化学模拟等内容。

    每次读到RSA密码系统、Shor算法内容时,都有种感觉,简单的数字、神奇的数学、竟然还这么有用,这些内容对量子计算的研究者是基础内容,在此与大家分享。

    本文经授权转自《我的量子》微信公众号

    展开全文
  • C语言:求分解一个任意合数为质数乘积形式如:100是要分成2*2*5*5才算最后的答案7=1*7的形式是正确的16=2*2*2*2 正确 #include<stdio.h>main(){int n,i;printf("input the num:\nn=");scanf("%d",&n);...

     

    C语言:求分解一个任意合数为质数乘积形式
    如:
    100是要分成2*2*5*5才算最后的答案
    7=1*7的形式是正确的
    16=2*2*2*2 正确

    #include<stdio.h>
    main()
    {
     int n,i;
     printf("input the num:\nn=");
     scanf("%d",&n);
     printf("%d=1*",n);
     for(i=2;i<=n;i++)
        if(n%i==0)
           printf("%d*",i),n/=i,i=1;
     printf("\b ");
     getchar(),getchar();
    }
    结果如:100=1*2*2*2*5*5
           1024=1*2*2*2*2*2*2*2*2*2*2

     

        

    相关文章:

    非常夏日毕业设计  www.bysjdz.com  毕业设计毕业论文  论文定做免费论文  开题报告  文献综述  外文翻译  毕业设计定做  计算机毕业设计  计算机毕业论文 计算机外文翻译

    找吧!毕业设计  www.zhaobysj.com毕业设计毕业论文论文定做免费论文 开题报告  文献综述 外文翻译  毕业设计定做  计算机毕业设计   计算机毕业论文 计算机外文翻译

    转载于:https://www.cnblogs.com/hotsummer/archive/2011/01/16/1936789.html

    展开全文
  • 一条学校的ACM演练题目,很让人郁闷今天之...就是求一个质数满足其的值等于两个质数的平方和就是要满足K= A^2 + B^2 这个要求,其中A,B是质数,K当然是要求的质数,那好解法可以这样求一个质数,然后再求出另一个不同
  • lintcode---质数乘积

    2018-03-23 16:50:02
    给定一个无重复的质数数组arr,每个质数最多使用一次,求所有无重复的乘积并从小到大排序。 注意事项: 2 &lt;= |arr| &lt;= 9 2 &lt;= arr[i] &lt;= 23 样例: 给出 arr = [2,3], 返回 [6]。 ...
  • 做这主要是想把一长矢量转化为一张尽量方正的图片,用于CNN import numpy as np def crack(integer): start = int(np.sqrt(integer)) factor = integer / start while not is_integer(factor): start += 1 ...
  • 质数乘积 题目描述 TWQ每天疯狂的刷题,今天又刷到一道水题,于是赶紧来拿一血吧,给你一正整数n,求小于n的数中所有质数的乘积,输入有多组测试用例,0为结束标志,所有质数的乘积初始值为0。 输入 正整数n(n<=...
  • RSA的用户创建并随后发布两个质数乘积以及一个辅助值作为其公钥。 主要因素必须保密。 任何人都可以使用公共密钥对消息进行加密,但是使用当前发布的方法,如果公共密钥足够大,则只有了解素数因素的人才能对...
  • 上一篇文章已经实现了一个整数分解为两个质数乘积,但针对这张图片,还有一个附加题,统计3出现的次数。下面我们来看下思路: 最优思路:从数字规律着手,提高时间效率 如果第i位(从低位向高位开始)上的数字是0...
  • public static void main(String[] args) { fun(100); } public static void fun(int num){ int i=2; if(num==i){ System.out.println(num); return; }else{ while(true){ ... ...
  • 质数

    2021-07-16 14:50:30
    数论 质数 质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数 判断一数是不是质数,可以从2枚举到|sqrt(n)|试试是否可以被整除就好了 模板1
  • 输入两个数,求这两个数的最大公约数输入连个数,求这两个数的最大公约数:分析: 最大公约数:这个两个数能同时被一个数整除,那么这个数就是这两个数的公约数,那么最大公约数就是这两个整数的所有质数约数的乘积。...
  • 质数是数的钥匙

    2019-07-13 21:17:32
    任何个质数看做一把独立的钥匙(质数是数字世界的基,可类比为线性代数中的基向量这个概念)。 任何一个数都可以进行质因式分解,进而得到该数字的钥匙组合。(比如 15 = 3 * 5,即15这个数是根植于一把质数3钥匙...
  • 算法:如何判断一数是否是质数

    千次阅读 2019-02-02 16:31:48
    质数(Prime number),又称素数,指在大于1的自然数中,除了1和该数自身外,无法被其他自然数整除的数(也可定义为只有1与该数本身两个正因数的数)。 大于1的自然数若不是素数,则称之为合数(也称为合成数)。 ...
  • 任何一个合数都可以写成几个质数相乘的形式。请编写程序分解质因数(以下各题皆假设用户输入都是合法的数据,即不考虑非法输入)。#include &lt;stdio.h&gt; #include &lt;math.h&gt; int main(){ ...
  • 领福利找小编电子课本点击图片,查看大图▼▼▼▼知识点1、自然数按因数的个数来分:质数、合数、1、0.2、一个数,如果只有1和它本身两个因数,那么这样的数叫做质数(或素数)。如2,3,5,7都是质数。3、 一个数,如果...
  • 任何数都能表示成n=a*2016+i,m=b*2016+j; n*m=a*b*2016^2+a*2016*j+b*2016*i+i*j; 如果i*j是2016的倍数的话,那么n*m一定是2016的倍数, 这样在2016*2016的规模中遍历出符合i*j%2016=0的数, 按照n中有多少...
  • 在论坛上面看到这个有意思的题目,花了点时间给他搞了下。` #include #include using namespace std;...//判断是否可以两个素数相乘 int main() { long i; long num ; long j = 1; long tmp = num / ...
  • 关于质数的几定理

    万次阅读 2017-03-25 20:05:18
    1.质数定义为在大于1的自然数中,除了1和它本身以外不再...4.任一大于1的自然数,要么本身是质数,要么可以分解为几个质数,且这种分解是唯一的。 5.若n为正整数,在 到 之间至少有一个质数。 6.若n为大于或等于2
  • 1-20的两个数把和告诉A,告诉B, A说不知道是多少, B也说不知道, 这时A说我知道了, B接着说我也知道了, 问这两个数是多少? 分析: 设和为S,为M。 首先,A:我不知道。 说明:S可以分解成多个组合,...
  • 虽然还有门课没考,但今天已经轻松了不少。梦魇般的现代文学史总算是结束了。抱了夜的佛脚,结果考试时一看卷子,仍然没一道会的题目。不定项选择多选少选均不得分,都是些文学常识题,给四篇我从没见过的...
  • 五年级上册数学公式小结第一单元:小数的乘法一个因数乘另一个因数,两个因数的小数位数之和有几位,就有几位。例如:3.45×6.29=21.7005但是如果乘得的小数末尾是零,零就可以省略不写。例如:3.65×6.72=24.528...
  • 1-20的两个数把和告诉A,告诉B, A说不知道是多少, B也说不知道, 这时A说我知道了, B接着说我也知道了, 问这两个数是多少? 分析: 设和为S,为M。 首先,A:我不知道。 说明:S可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,973
精华内容 2,789
关键字:

任意两个质数的乘积是