精华内容
下载资源
问答
  • while(i < 100): j = 2 while(j <= (i/j)): if not(i%j): break j = j + 1 if (j > i/j) : print(i, end=" ") i = i + 1 </code></pre> 逻辑有点理不清</p>
  • 求素数的简单优化算法 代码: def is_prime_number(n): """ 判断一个整数是否为素数 :param n: int :return: 0或者1 """ if n <= 1: return 0 if n % 2 == 0 and n != 2: return 0 else: # 用于循环 ...

    求素数的简单优化算法

    代码:

    import math
    def is_prime_number(n):
        """
        判断一个整数是否为素数
        :param n: int
        :return: 0或者1
        """
        if n <= 1:
            return 0
        if n % 2 == 0 and n != 2:
            return 0
        else:
            # 用于循环
            i = 3
            while i <= math.sqrt(n):
                if n % i == 0:
                    return 0
                else:
                    i += 2
        return 1
    

    思路:

    1.排除除2以外的偶数,i 只遍历奇数

    2.n 开平方,因为 如果i ^ 2 = n ,且 a * b = n,在 a != b的情况下,a和b必定一个大于 i,一个小于 i,故循环 i 只需要遍历到 n的开平方;

    3.举例:221 = 13 x 17 ,221 开平方是14多一点,当我们 i 循环到13时 13 x 17 = 221就可以结束循环,必不会超过14,往后循环也只能找到 17 x 13 = 221,这没有意义,就是说如果循环到 n 的开方还没有找到能够整除 n 的 i,则 n 必为素数,因为后面的判断和前面的本质上一样(如 13x17和17x13)

    展开全文
  • 包含函数模块化求素数,代码使用率更高 使用do…while做人机交互遇到的麻烦 新手日记1:使用do…while循环制作人机交互(输入y再次执行程序,输入n结束并退出) 遇到的麻烦:在输入y字符后,do…while循环不进行循环...

    包含函数模块化求素数,代码使用率更高

    使用do…while做人机交互遇到的麻烦

    新手日记1:使用do…while循环制作人机交互(输入y再次执行程序,输入n结束并退出)

    遇到的麻烦:在输入y字符后,do…while循环不进行循环,直接退出

    /*
      2019年11月30日23:02:35
      使用函数模块化将判断素数的指令分开进行自定义函数
      使函数更加高效使用;
      Mading in JiuFen;
    */
    #include<stdio.h>
    #include<stdbool.h>
    bool Isprime(int val);  //求该数字是不是一个素数
    int Traverseval(int val1);  //求2到该区间有多少个素数,并且统计个数并且输出全部素数
    int main()
    {
        int ival;
        int rc;
        char  pd;
        do
        {
            printf("进入程序,该程序有两个功能\n");
            printf("输入1选择功能一:输入一个数字,系统对其进行素数判定\n");
            printf("输入1选择功能一:输入一个数字,系统对扫描从2到该数字内有多少个素数,并对其统计个数输出\n");
            scanf("%d",&rc);
    
            switch(rc)
            {
                case 1:
                    printf("请输入一个数字:系统对其进行素数判定\n");
                    scanf("%d",&ival);
                    if(Isprime(ival))
    
                        printf("Yes!\n");
                    else
                        printf("NO!\n");
    
                    break;
                 case 2:
                    printf("请输入一个数字:系统对扫描从2到该数字内有多少个素数,并对其统计个数输出\n");
                    scanf("%d",&ival);
                    Traverseval(ival);
                    break;
                 default:
                    printf("WARNING : 你输入错误,系统停止,请按照说明从新输出!!!!\n");
            }
                printf("使用继续使用,如果使用,输入Y/y,退出N\n");
               //或使用scanf("%c",&pd);
               pd = getchar();
        }while(pd == 'Y' || pd == 'y');
    
        return 0;
    }
    bool Isprime(int val)
    {
        int i;
        for(i = 2;i<val;i++)
        {
            if(val % i == 0)
                break;
        }
        if(val == i)
            return true;
        else
            return false;
    }
    int Traverseval(int n)
    {
        int i;
        int count = 0;
        for(i = 2;i<= n;i++)
        {
            if(Isprime(i))
            {
                printf("%d\n",i);
                count++;
            }
    
        }
        printf("该区间内总计素数个数为%d\n",count);
    }
    
    

    使用上述代码do…while 都无法进行正常循环

    发现,输入的scanf在接收键盘时,需要在scanf(" %c",&pd)中的%c前边加上一个空格,此时代码即可正常运行,do…while生效

    或者采用

    getchar();
    pd = getchar();
    

    此时代码即也可正常运行,do…while生效

    对其猜测,可能在输入前需要接受一个回车,才可以正常输入y或者n,否则,scanf会接收一个回车输入,导致程序判定失败,无法正常循环。

    下列附上正确代码

    /*
      2019年11月30日23:02:35
      使用函数模块化将判断素数的指令分开进行自定义函数
      使函数更加高效使用;
      Mading in Mr.JiuFen;
    */
    #include<stdio.h>
    #include<stdbool.h>
    bool Isprime(int val);  //求该数字是不是一个素数
    int Traverseval(int val1);  //求2到该区间有多少个素数,并且统计个数并且输出全部素数
    int main()
    {
        int ival;
        int rc;
        char  pd;
        do
        {
            printf("进入程序,该程序有两个功能\n");
            printf("输入1选择功能一:输入一个数字,系统对其进行素数判定\n");
            printf("输入1选择功能一:输入一个数字,系统对扫描从2到该数字内有多少个素数,并对其统计个数输出\n");
            scanf("%d",&rc);
    
            switch(rc)
            {
                case 1:
                    printf("请输入一个数字:系统对其进行素数判定\n");
                    scanf("%d",&ival);
                    if(Isprime(ival))
    
                        printf("Yes!\n");
                    else
                        printf("NO!\n");
    
                    break;
                 case 2:
                    printf("请输入一个数字:系统对扫描从2到该数字内有多少个素数,并对其统计个数输出\n");
                    scanf("%d",&ival);
                    Traverseval(ival);
                    break;
                 default:
                    printf("WARNING : 你输入错误,系统停止,请按照说明从新输出!!!!\n");
            }
                printf("使用继续使用,如果使用,输入Y/y,退出N\n");
                scanf(" %c",&pd);   //注意%c前有一个空格
               //getchar();
               //pd = getchar();
        }while(pd == 'Y' || pd == 'y');
    
        return 0;
    }
    bool Isprime(int val)
    {
        int i;
        for(i = 2;i<val;i++)
        {
            if(val % i == 0)
                break;
        }
        if(val == i)
            return true;
        else
            return false;
    }
    int Traverseval(int n)
    {
        int i;
        int count = 0;
        for(i = 2;i<= n;i++)
        {
            if(Isprime(i))
            {
                printf("%d\n",i);
                count++;
            }
    
        }
        printf("该区间内总计素数个数为%d\n",count);
    }
    
    

    谢谢大家!!!

    展开全文
  • max=(a>b)?a:b 真 a赋值给max 假 b赋值给max fabs:浮点数的绝对值 两个绝对值函数:一个是abs(x)x的绝对值,结果是整型 另一个是fabs(x) x是双精度 ,结果是双...三种循环语句  while do.....while

    max=(a>b)?a:b

    真  a赋值给max

    假  b赋值给max


    fabs:求浮点数的绝对值

    两个求绝对值函数:一个是abs(x)求x的绝对值,结果是整型

    另一个是fabs(x) x是双精度 ,结果是双精度


    for(1;2;3;) 语句

    1;

    while2

    {语句3

    }  

    两者无条件等价

    三种循环语句 

    while

    do.....while

    for


    凡是用while循环完成的,用for循环都能完成


    素数:如果n不能被2~(n-1)范围内的整数整除即是

              如果n不能被2~根号n之间任一整数整除即是


    展开全文
  • while循环语法 及 练习题while循环while 循环的语法练习题1.找出三位数所有水仙花数:2.GDP:3.计算π:4.判断是否为素数:1丶2丶4 的解法:1.2.4. while循环 用官方的话说就是: Python 编程中 while 语句用于...

    有对循环结构有疑问的请移步
    大家好我是墨码,欢迎观看,有什么意见请评论!

    while循环

    用官方的话说就是:

    Python 编程中 while 语句用于循环执行程序,
    即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。
    while循环常用于处理一些单循环。
    

    while 循环的语法

    while 判断条件:
    	执行语句
    

    注意:如果循环的条件成立,运行“循环内容”如果不成立,跳过循环,同时请务必不要写死循环,请遵循循环结构的规则
    下面是练习题。

    练习题

    1.找出三位数所有水仙花数:

    思路:

    # 找出三位数的所有水仙花数
    
    # 首先要限定范围
    
    # 分别拿出个位十位百位 然后 相加
    
    #符合条件后进行判断
    
    # 下次进入循环需要增长或减少的值
    

    2.求GDP:

    题目:z国2009年GDP 为49089.82 亿元 增长率为 8%,m国同年GDP 为142562.75亿元 增长率为 2%。问:增长率不变,哪一年z国能超过m国?

    思路:

    # 设置变量 输入两国 现在 GDP
    
    # 设置当前年份
    
    # 循环 
    
    # 输出结果
    

    3.计算π:

    可能不咋精确!
    这道题上代码吧 - - 自己解释太费劲了!

    #定义分子默认值
    fz = 1 # 最开始是1 每次+2
    #定义和
    sum = 0 #初始为0   #分子的和
    #定义符号
    sign = 1 #设置1为正数
    #定义每个分数
    #分子除以分母,每次符号会改变,根据π = (4/1)-(4/3)+(4/5)变成
                              # π = +(+4/1)+(-4/3)+(+4/5)方便写代码
    fs = sign * 1 / fz  #改变符号
    # 开始循环
    # 确定循环范围
     # 这里写绝对值,因为让其一直为正数
     #(10的-8次方,电脑慢写-6,也可以写科学技术发 10e-6)
    while abs(fs) > 10**-8: 
        sum += fs #计算好的分数
        sign *= -1 #符号每次改变
        fz += 2 #分子每次+2
        fs = sign *1 / fz
    # 乘上分母
    pi = sum * 4 
    print(pi)
    
    

    4.判断是否为素数:

    题目:#输入一个数判断是否素数。 素数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

    思路:

    #输入一个数
    
    #初始值
    
    #循环 结束条件:
    #	循环体
    
    #跳出循环
    
    #判断是否是素数
    

    1丶2丶4 的解法:

    1.

    # 找出三位数的所有水仙花数
    
    # 首先要限定范围
    n = 100
    while (n<=999):
        # 拿出个位十位百位相加
        sxh_str = str(n)
        a = int (sxh_str[0])
        b = int (sxh_str[1])
        c = int (sxh_str[2])
        sum = a**3 + b**3 + c**3
        #符合条件干什么
        if sum == n :
          print('%d是水仙花数' %n)
    # 下次进入循环n的值
        n += 1
    
    

    2.

    #中国2009年GDP 为49089.82 亿美元 增长率为 8%
    #美国同年GDP 为142562.75亿美元 增长率为 2%
    #问:增长率不变,哪一年中国能超过美国?
    
    #中国GDP
    china = 49089.82
    #美国GDP
    am = 142562.75
    #年份
    year = 2009
    #结束条件 china > am
    while china < am: #这里的意思是运行的条件,所以是小于号,一旦大于就不运行了,只有小于美国的时候才会运行。
        china = china + (china * 0.08) #每年增长 百分之8
        am = am + (am * 0.02) #每年增长 百分之2
        year += 1
    
    print('%d年 中国超过美国' %year)
    
    

    4.

    # 输入一个数
    a = int(input("输入一个数:"))
    i = 1  # 需要整从1 开始
    su = 0  # 被整除的次数 如果等于二就是素数
    while i <= a:  # 完成从 a/1 到 a/a 后 结束
        c = a % i  # c为余数
        if c == 0:  # 判断余数是否是0
            su += 1  # 是的话记一个数
        i += 1  # 开始 a/2
    # 如果跳出循环 判断被整除的次数是否等于2,也就是是否为素数(两次:被1 和 本身 整除)。
    if su == 2:
        print("%d是素数" % a)
    else:
        print("%d不是素数" % a)
    
    

    没啦! 感谢观看,欢迎评论,Thanks♪(・ω・)ノ

    展开全文
  • 多个方法求素数

    2019-07-05 09:17:41
    定义筛法 ...//1因为我们人为定义它不是素数,而且1也会陷入死循环 while (i<=sqrt(n)&&n%i!=0) ++i;//当它不超过n的平方根时,用n一个一个试; if(i<=sqrt(n))return 0;//没...
  • 前n个素数之和(循环语句的问题) 题目描述 前n个素数的和。 例如,前5个素数是2、3、5、7、11,它们的和是28。 输入 一个整数n,1。 输出 前n个素数的和 样例输入 5 样例...
  • for语句 当步长为1时,步长可以省略。和前面学的矩阵的初始化类似...例1: 1-2+3-4+…+(-1)n-1n y=0; g=-1; n=input('n=?'); for i=1:n g=-g; y=y+g*i; end y //法一 n=input('n=?'); x=1:n; y=(-1).^(0:n-1).*x;
  • eg: 使用多线程实现1-100之间的所有素数 from threading import Thread,Lock lock=Lock() #创建锁 list1=[] for i in range(2,101): list1.append(i) def prime_number(): global list1 while True: #这里...
  • 使用for if等语句编译出一定范围内所有的素数大神指教
  • 质因数分解,把n从1到sqrt(n) 进行分解,即,for循环枚举i,若i能整除n,则用while循环不断地除n,边除边分解,标记.但在某些情况下,最后必然分解不完,因此最后进行以此特判,即最后再分解一步即可. #include&...
  • 代码如下 #include&lt;stdio.h&gt; #include&lt;math.h&gt; int panduan(int i) { ... while(n&lt;=sqrt(i)) { if(i%n==0) p=0; n++; } return p; } ...
  • 包括while循环、do-while循环、 for循环、嵌套循环、最大公约数、计算销售额、显示数字构成的金字塔、关键字break和continue、语句标号以及利用标号中止循环(可选)、显示素数(可选) 。
  • 但我不知道为什么在for语句的时候,必须使用divisor,而divisor就无法执行、、这里break是不是跳出整个while循环,还是调回到for.求解。 import java.util.Scanner; public class Test{ public static void main...
  • 素数

    2011-11-08 21:50:30
    素数一直是个头疼的话题,不过最好还是克服一下。至少知道如何来进行处理。 a^b 那种老掉牙的for循环就不要写了吧。 这里粘个高效的。 template T _exp(T a, T b) { T odd = 1; while (b > 1) { if (b&...
  • /100以内全部素数,每行输出10个,要求定义和调用函数prime(m)判断是否为素数,是返回·1,不是返回0/ 错误1:while与if区别:if执行一次后跳出循环while判断为真后执行后面语句,执行完后继续回继续判定,...
  • Java判断素数

    2020-12-17 16:24:14
      对于求素数问题,很容易想到采用循环方式去解决这个问题,判断一个数n是不是素数,我们让这个数n对2到n-1求余,在这个过程中,如果始终未出现n对这些数求余为0的情况,则认为n就是素数,反之在这个过程中,只要...
  • 文章目录一、break和continue语句简介二、带有break和continue来1-100的素数例子(2)不用break和continue怎么写?(3)循环嵌套怎么写?...while循环是: (2)continue 语句也会终止当前循环,和 break 语...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 141
精华内容 56
关键字:

while循环求素数