[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] [已解决]批处理怎么判断素数?

本帖最后由 abcdshenji 于 2011-3-20 03:03 编辑

【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
      则表明此数不是素数,反之是素数。

随风大哥是这样写的:
  1. @echo off&setlocal EnableDelayedExpansion
  2. for /l %%a in (101 1 200) do (
  3.   set /a n=%%a-1&set "flag="
  4.   for /l %%b in (2 1 !n!) do (
  5.     set /a m=%%a%%%%b
  6.      if !m! equ 0 set flag=a
  7.   )
  8.   if not defined flag echo 素数 %%a
  9. )
  10. echo\&pause
复制代码
youxi01大哥这样写:
  1. @echo off&setlocal EnableDelayedExpansion
  2. for /l %%a in (101 2 200) do (
  3.   set "flag="
  4.   for /l %%b in (3 2 15) do (
  5.     set /a m=%%a %% %%b
  6.      if !m! equ 0 set flag=A
  7.   )
  8.   if not defined flag echo 素数 %%a
  9. )
  10. echo\&pause
复制代码
第一个例子平方根为什么是%%a-1?第二个例子又为什么在(3 2 15)范围循环?

11楼对素数的定义了解吗?如果了解,可以把所有的合数当成分子来看,素数就是原子,只有原子才不是由多个原子组成的。如果你说化学也不好,那我没话说了...

TOP

回复 10楼 的帖子

汗一个。。。小弟不只数学不好语文也不好。。你说的这些不知道跟我问的问题有什么必然联系。。越迷糊了。。唉

TOP

1,是代码看不明白,还是思路不明白
2,如果是思路,那只能说明你的数学没学好了
奇数*奇数=奇数
奇数*偶数=偶数
偶数*偶数=偶数
除了2以外的偶数都是合数(主要是指正整数),而合数至少要有3个约数,自身还有1就是其中之2。约数是不可能超过自身的。所以就是这样了。
在学校里,我只是个不喜欢上劲的学生,也只能说到这样了
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

回复 7楼 的帖子

大哥你这段我看不懂啊。。能详细解释下吗

TOP

回复 2楼 的帖子

1、set /a n=%%a-1帮忙解释下为什么是%%a-1?
2、那为什么前面%%a的步长是2不是1?

TOP

  1. @echo off&setlocal enabledelayedexpansion >素数.tmp 3>素数.tmp
  2. echo 2
  3. for /l %%a in (3 2 200) do (
  4.    for /f %%b in (素数.tmp) do set /a "test=1/(%%a%%%%b)"||set tmp=%%a
  5.    if %%a neq !tmp! echo %%a
  6. ) 2>nul
  7. type>con 素数.tmp
  8. pause
复制代码

[ 本帖最后由 zm900612 于 2011-3-16 14:10 编辑 ]
1

评分人数

    • qzwqzw: 这个思路早就有人想到了 应该是在5楼的链接 ...技术 + 1

TOP

用一个数除去所有小于他的素数,凡是不能被整除的必为素数

TOP

***共同提高***

TOP

一种方法吧,不见得速度快。
  1. @echo off&setlocal EnableDelayedExpansion
  2. set "th=1"&set /p=请输入一个数:
  3. for /l %%i in (1,1,!p!) do (
  4.   set "str=!str!1"
  5. )
  6. rem 也可以加上先判断是否偶数。
  7. for /l %%i in (3,2,!p!) do (
  8.     set "th=!th!11"
  9.     for /f %%j in ("!th!") do (
  10.         if "!str:%%j=!"=="" set "flag=非素"&goto :end
  11.     )
  12. )
  13. :end
  14. if defined flag (
  15.   echo 非素数
  16. ) else (
  17.   echo 素数
  18. )
复制代码

TOP

记得网上有个判断素数的正则表达式,
虽然findstr不支持分组捕获,但也是可以应用到BAT中的。

TOP

1。平方根在哪里?
2。15的平方>200>14的平方。偶数被过滤了。所以从3开始,步长为2。此种方法属于特殊方法
枫中残雪:风停了,我的心却在动,让我心中的寒意走向远方

TOP

返回列表