精华内容
下载资源
问答
  • 求十个最小连续自然合数。 根据c语言改编一下,其实思路都一样,循环找出符合条件的数字。存放到数组,最后输出满足条件的就好了。一定要明白判断合数的条件。这里要注意continue的使用。注释我已经说的听明白了,...

    求十个最小连续自然合数。

    根据c语言改编一下,其实思路都一样,循环找出符合条件的数字。存放到数组中,最后输出满足条件的就好了。一定要明白判断合数的条件。这里要注意continue的使用。注释我已经说的听明白了,听不懂的大家多多见谅哈哈哈。
    ps:我在csdn找不到java版本的,只有c语言版本,我就直接按照原创发布了,刚入门,有违规则的请大佬及时告知我,谢谢了。

    	public static void main(String[] args) {
    		int i,j,h;
    		boolean flag;
    		int count=0;
    		int[] a = new int[10];
    		for(i=1;true;i++)    
    		    {flag=true;
    		        for(j=2; flag&&j<i/2; j+=1)    //判断能否被从2到整数的一半的某一数所整除
    		            if(0==(i%j))    //若能除开,则是合数
    		                flag=false;
    		        if(flag)    //素数
    		        {
    		            count=0;//数组下标
    		            continue;//若是素数,数组将会被新的for循环所找到的数字重新赋值
    		        }
    		        else   //是合数
    		        {
    		            a[count]=i;
    		            count++;
    		        }
    		        if(10==count)    //已找到连续的十个合数
    		            break;    //跳出循环,第一次找到的即为最小的十个连续合数
    		    }
    		    System.out.print("10个连续最小合数分别为:");
    		    for(h= 0; h <10; h++)   
    		    System.out.print(a[h]+" ");//存到数组挨个输出
    	}
    }
    

    结果:
    10个连续最小合数分别为:114 115 116 117 118 119 120 121 122 123

    展开全文
  • 素数,又称质数,是指大于1的自然数中,除了1和它本身以外不能被其它数整除的数。最小素数是2。 因此,可以用该整数n分别除以 2~n-1 的数,若都不能整除,则是素数。为了使整数n分别除以2~n-1的数,可以使用一个...

    目录

    1. 判断素数函数
    2. 回文数字判断函数
    3. 求大于某个自然数n的最小的既是素数又是回文的数

    1.判断素数函数

    一.思路

    素数,又称质数,是指在大于1的自然数中,除了1和它本身以外不能被其它数整除的数。最小的素数是2。
    因此,可以用该整数n分别除以 2~n-1 的数,若都不能整除,则是素数。为了使整数n分别除以2~n-1的数,可以使用一个for循环,代码如下:

    /*判断n是否素数,若是素数,返回1,否则返回0*/
    int IsPrimeNumber(long n)
    {
    	/*******Begin*******/
    	int flag = true;//用于返回的标志变量
    	int i;
    	 if(n<=0)//对输入的数作合法性判断
        {
         printf("Input error! Please input a positive integer x(>0):");
         return -1;
        }
        else
        {	
            for(i=2;i<n-2;i++)
            {        	 
    		   if(0==n%i)
                {
    			flag = false;	break;			
                }
            }
            return flag;         
        }
    	/*******End********/
    }
    

    二.改进

    考虑这样一种情况:假如n是合数,则必然存在除去1和本身的两个约数x1和x2,其中x1<=sqrt(n),x2>=sqrt(n)。由此我们可以改进上述方法优化循环次数。

    int IsPrimeNumber(long n)
    {
    	/*******Begin*******/
    	int flag = true;//用于返回的标志变量
    	int i;
    	 if(n<=0)//对输入的数作合法性判断
        {
         printf("Input error! Please input a positive integer x(>0):");
         return -1;
        }
        else
        {	
            for(i=2;i*i<=n;i++)
            {        	 
    		   if(0==n%i)
                {
                flag = false;	break;
                }
            }
            return flag;        
        }
    	/*******End********/
    }
    

    2. 回文数字判断函数

    1.思路

    回文数是关于数字中心对成的数,如1234321,121,6。因此我们可以将数字的各位取出来,放到数组 a[] 里,再比较两个头尾位置的数是否相等,如果每组都相等,则该数字是回文数。

    2.代码实现

    /*判断n是否回文数,若是回文数,返回1,否则返回0*/
    int hws(long n)
    {
    	/*******Begin*******/
    	int	a[20];//存放各位的数字(可存放19个数字)。
    	int flag = 1;//设置标志变量,用于返回。 
    	int i =0,j;
    	do
    		{			
    		 a[i] = n%10;		//将数n的个位存入a[0],其余位置依次存入。 
    		 n/=10;		//将数n的最后一位舍掉,以得到相应位置上的数字。
    		 i++;
    		}while(n);//循环结束的条件是n变为0
    		
    	for(j=0;j<i/2;j++)
    	{
    		if(a[j]!=a[i-2-j])		//将数组头尾两端的数进行比较
    		{
    			flag = 0;
    		}
    	}
    	return flag;
    	/*******End********/
    }
    

    3. 求大于某个自然数n的最小的既是素数又是回文的数

    一.代码

    取中间变量x=n,这里可以从n本身开始,判断它是否满足条件,若不满足,则x++,直到找到满足条件的x。

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #define true 1
    #define false 0
    //函数声明
    int IsPrimeNumber(long n);
    int hws(long n);
    
    int main()
    {
        long n;
        int flag=0;
         printf("请输入自然数n:");
        scanf("%ld",&n);
    	int x =n;
    	do
    	{
    		if(IsPrimeNumber(x)&&hws(x))		//利用函数的返回值判断是否满足条件
    		{
    			flag = 1;
    			printf("最小的满足条件数为:%d",x);
    		}
    		else
    		{
    			x++;
    		}
    	}while(!flag);
    
        return 0;
    }
    

    二.测试结果

    输入负数
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • [quote="...然后最小公倍数就是所有质数的相应幂的积 比如N=10 小于10的质数有2,3,5,7 对应的最大幂是:3,2,1,1 则最小公倍数是:2^3x3^2x5^1x7^1 = 2520 不过这样做估计会很吃内存的 ...
    [quote="凤舞凰扬"][quote="elmar"]
    准备1-N之间的质数的集合
    然后求每个质数的不大于N的最大幂,比如N=30时,2对应的最大幂是4。
    然后最小公倍数就是所有质数的相应幂的积

    比如N=10
    小于10的质数有2,3,5,7
    对应的最大幂是:3,2,1,1
    则最小公倍数是:2^3x3^2x5^1x7^1 = 2520

    不过这样做估计会很吃内存的

    [/quote]
    楼上列出的这个算法不错,比我前面想出的更好,不过我还是没有理解每个素数不大于N的最大幂所包含的数学原理。

    [/quote]
    这个算法和楼上的简单的算法的思路是一样的,只不过计算的过程有了变化。
    [quote="凤舞凰扬"]
    虽然想到下面这个简单的算法,个人认为不算那么高效(因为需要对合数进行分解)。

    1. 对于每个数,如果是素数,则一定是最小公倍数的构成,参与计算。如果是合数,则分解成一组素数。

    2. 对于每个素数,都有一个类似map的结构(这种结构不仅仅是指语言的中map,而是类似的二维表),key为素数,value为素数出现的次数(可以是出现在自然数列中的,也可以是由合数分解出来的)。

    3. 如果合数分解出的素数组存在于map中(key=素数,value>=分解的素数次数),则该合数不参与计算中。
    [/quote]

    数学原理解释:
    1 这里应用了算术基本定理。
    任何一个自然数N>1,都可以唯一的分解成质因数的连乘积,即
      N=(P1^a1)*(P2^a2)......(Pn^an) (N>1)
     其中P1,P2,P3,.......,Pn 为互不相等的质数且递增排列。
    a1,a2,......,an 为自然数。
    2 最小公倍数
    整数m>1,n>1,如何求lcm(m,n)呢。
    1 把m,n展开为标准的质数连乘积形式。
    2 则lcm(m,n)的标准的质数连乘积形式中的质数必定来自于m或者n的标准的质数连乘积形式中的质数,其幂值为m,n中该质数对应的幂值的最大值。

    例子
    8=(2^3)
    12=(2^2)(3^1)
    lcm(m,n)=(2^3)(3^1)=24

    扩展一下,如何求N个数的lcm呢。
    1 把N个数展开为标准的质数连乘积形式。
    2 则lcm的标准的质数连乘积形式中的质数必定来自于这N个数的标准的质数连乘积形式中的质数,其幂值为在这N个数的标准的质数连乘积形式中该质数对应的幂值的最大值。

    例子
    12=(2^2)(3^1)
    10=(2^1)(5^1)
    8=(2^3)
    lcm=(2^3)(3^1)(5^1)=120

    简单的总结一下这种算法的思路,就是确定lcm的质数因子和质数因子的幂指数。

    对于leeldy的算法,其实和搂主的还是有一定区别的。
    搂主的简单算法可以计算任意的连续整数的lcm。
    而leeldy的算法只能计算从1开始的连续N个整数的lcm。

    leeldy的算法中
    因为是求1-N的连续的整数的lcm,所以1-N中的所有质数都在lcm的标准的质数连乘积中。
    而求每个质数的不大于N的最大幂就是求该质数的幂指数了。
    展开全文
  • 本来是有个问题,如何HTML只使用一个table(也就是不能嵌套table,不使用div)的情况下,一个table有N行,每行的列数与对应的行的位置是相同的(也就是1行有1列,第2行有两列,依次类推,第N行有N列),要求每行...

          本来是有个问题,如何在HTML中只使用一个table(也就是不能嵌套table,不使用div)的情况下,一个table有N行,每行的列数与对应的行的位置是相同的(也就是1行有1列,第2行有两列,依次类推,第N行有N列),要求每行中的每列都平均分割显示。

          当时一下子没有想起来,以为通过colspan加width可以实现,后来发现不对。只好用一个相对愚蠢的方式,也就是算出1到N之间的最小公倍数,然后对于每行,在除以行数,就得出colspan的值,从而实现这个问题。比如说有6行,它们的最小公倍数是2*5*6也就是60,那么第1行就是colspan=60, 第2行就是colspan=30, 第3行就是colspan=20,第4行就是colspan=15, 第5行就是colspan=12, 第6行就是colspan=10. 这样也就可以实现上述问题,当然了,这种方法是在N不会太大的情况下,否则最小公倍数是会溢出的。

          不过这个问题给我另外一个思考,如果N未定,但有限(比如不会溢出),那么如何比较快速有效地找到一系列连续自然数的最小公倍数?这种高效,本人希望是不仅对计算机而言,更对人而言。比如说通过数相乘然后除以下一个自然数,模数为0的忽略,不为0的再累积乘的方式,对计算机而言是快速的,但是对人而言就是复杂的了(每次计算一个大数除以一个较小数都比较麻烦)。

          虽然想到下面这个简单的算法,个人认为不算那么高效(因为需要对合数进行分解)。

          1. 对于每个数,如果是素数,则一定是最小公倍数的构成,参与计算。如果是合数,则分解成一组素数。

          2. 对于每个素数,都有一个类似map的结构(这种结构不仅仅是指语言的中map,而是类似的二维表),key为素数,value为素数出现的次数(可以是出现在自然数列中的,也可以是由合数分解出来的)。

          3. 如果合数分解出的素数组存在于map中(key=素数,value>=分解的素数次数),则该合数不参与计算中。

     

          呵呵,有兴趣的朋友可以讨论讨论,提提自己的想法。

     

     

    ----2009-10-27补充----

        昨天吃完饭散步的时候,突然把三楼elmar的数学原理想通了,其实一点都不难。我们知道任何合数都可以分解成两个或以上素数,因为合数本身是需要在连续数列范围中,那么分解出来的素数的乘积自然也必小于连续数列的最大边界数,又可以知道,由最小素数的幂次方肯定是最小值(也就是a<b<c, abc均为自然数, a*a*a<a*b*c),所以也就有了三楼列出的算法了。

       简单表述下,就是:

      1. 找出一段连续自然数列中的所有素数。

      2. 循环这个有序的素数数组,计算每个素数不大于自然数列中最大值的幂,然后累积相乘(这里有个优化,当某个下标的素数的平方已经开始大于最大值时,改下标及其后续素数均不需要在进行重复检查计算)

      顺便回到这个题目的最初原因,去构造这样一个表格,如果准确的话,其实这个N是必须小于9的,也就是最多是8,如果N为9,其最小公倍数将超过1000(9和10,均为2520),这样的colspan大部分浏览器不识别(包括IE, FIREFOX, google chrome)。当然了,可以近似地完成后续(至少从界面上看不出太多差别)

    展开全文
  • 素数又叫质数质数是指大于1的自然数中,除了1和它本身以外,不能被其他自然数整除的数。最小质数是2,它也是唯一的偶数质数,最前面的质数依次排列为:2、3、5、7、11、13、17、19、23、29、31等。” # ...
  • public class Test { public static void main(String[] args) { // 输入一个数 Scanner input = new Scanner(System.in); System.out.println("请输入一个数:");... // 判断是否是素数 boolean fl...
  • 算法:最小素数拆分

    2020-11-06 09:58:54
    素数是指大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 提示 哥德巴赫猜想:任意大于2的偶数都可以拆分成两个质数之和。该猜想尚未严格证明,但暂时没有找到反例。 import java.util.*; public ...
  • 请利用C语言程序,找出十个最小的连续自然数,它们个个都是合数(非素数)。 这里分享一个博主自己写的程序 ——————————————————————————————————————————————...
  • 摩尔的Java学习笔记1.6 求出自然数101~199的所有素数
  • //请找出十个最小的连续自然数,它们个个都是合数(非素数) #include"stdio.h" #include"stdlib.h" int main() {int k=0;//用于计数 for(int i=2;i { int key=1;//用于判断素数的标识,key=1的时候是素数 for(int j=2...
  • #include int main() { int i, j, k; int count = 0; for (i = 2;i ; i++) { int flag = 1; /*定义一个标志位用于判断是否为素数*/ for (j = 2; j ;
  • 求大于n的最小质数

    千次阅读 2019-05-09 23:09:10
    hash取模运算时选取比最大值还大的质数,就可以有效减少冲突。... * @description: 求大于n的最小质数 * @author: michael ming * @date: 2019/5/9 22:35 * @modified by: */ #include <stdio.h> #includ...
  • 蓝桥杯 求自然数序列的最小公倍数

    千次阅读 2013-06-16 16:49:13
    问题描述: 为什么1小时有60分钟,而不是100分钟呢?...我们希望寻找到能除尽1至n的的每个数字的最小整数。不要小看这个数字,它可能十分大,比如n=100, 则该数为:697203752297124771645338089353123035
  • public class ZhiShu { public static void main(String[] args) { for (int i=101;i;i+=2) { boolean a=false;... //Math.sqrt(i) 对i开根 ... System.out.println("质数:"+i+"\t"); } } } }
  • 1、判断一个数是否为素数,并求出1-1000的全部素数素数质数,除1和自身以外没有其它因子,最小质数是2)。 public class Jiejue1 { public static void main(String args[]) {  System.out.println("1...
  •  /* 当初这边犯了一个很低级的错误,导致我这个程序这边耽误了一个小时多  { 这边应该是n%j 但我写错了 写成 i%j 导致一直输不出来正确答案,都是4.5.6.7.8.9.10.11.12.13*/  count++;  flag = ...
  • 判断一个数是不是质数(素数),3种方式介绍

    万次阅读 多人点赞 2018-06-10 09:56:59
    一、概念介绍 大家中学都学过,就不过多介绍了,大致提两点:... 0和1既不是质数也不是合数,最小质数是2 二、方法介绍 1.最直观,但效率最低的写法 public static boolean isPrime(int n){ if (n <= ...
  • 自然数

    2010-08-16 16:32:00
    常用大写字母N表示 自然数集有加法和乘法运算,两个自然数相加或相乘的结果仍为自然数,也可以作减法或除法,但相减和 概念 相除的结果未必都是自然数,所以减法和除法运算在自然数集中并不是总能成立的。自然数是....
  • 质数 素数

    2010-02-22 10:16:00
    一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。素数在数论有着很重要的...
  • 模块:python3 while_for_range_break_continue_pass_自然数_质数_合数.py 功能:python3 循环。 参考:https://www.runoob.com/python3/python3-loop.html 知识点: 1.Python while 语句的一般形式: while ...
  • #include<stdio.h> int main() { int i,a=1,total=0; for(i=2;i<=229;i++) { if(prime(i)) { if(total++%10==0 ) printf("\n"); printf("%10d",i); a++;... }else if(m == .
  • 昨天给组织同学们上课讲simhash算法的时候考虑了如下问题: 如何判断如下两个自然数构成的集合 S1={e1,e2....,en}S_1=\{e_1,e_2....,e_n\}和S2={b1,b2,...,bn}S_2=\{b_1,b_2,...,b_n\}相同 其中提到假设构造...
  • 素数,或称质数 是只能被1或者自己整除的自然数。  1既不是质数,也不是合数,但我们特别规定,把1 当作质数处理,0当作合数处理。 <br /> 合数 除了1和它本身还有别的约数 <br /...
  • 编程输出1000到2000间的所有素数(质数)。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除。 输出格式要求:按从小到大顺序输出,每个输出数据占据一行。 输出样例: 1009 (注:运行时的输出) ...
  • 本文为大家分享了多种方法求质数...求质数方法1:穷举法:根据定义循环判断该数除以比他小的每个自然数(大于1),如果有能被他整除的就不是质数:def countPrimes1(self, n):""":type n: int:rtype: int"""if n...
  • C#找质数素数

    千次阅读 2016-02-28 13:59:01
    指整数一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数(除了1和它本身以外不再有其他的因数)。根据算术基本定理,每一个比1大的整数...
  • 题目: 相约2008:2008是一个合数,求出此合数最多由多少个最小不同质数和组成,并按要求从小到大输出... 质数是指大于1的自然数中,除了1和它本身以外不再有其他因数的自然数 (2)解题思路 本题数字2...
  • 质数/素数 - 合数

    2021-01-25 23:00:34
    大于 1 的自然数中,除了 1 和它本身以外不能被其它自然数整除的数。 大于 1 的自然数中,除了 1 和它本身以外不再有其他因数的数。 1 既不是质数也不是合数。 质数的个数是无穷的/无限的。 质数 p 的约数只有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,865
精华内容 1,946
关键字:

在自然数中最小质数