找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 29011|回复: 11

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

[复制链接]
发表于 2011-3-15 16:26:08 | 显示全部楼层 |阅读模式
本帖最后由 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)范围循环?
发表于 2011-3-15 19:45:37 | 显示全部楼层
1。平方根在哪里?
2。15的平方>200>14的平方。偶数被过滤了。所以从3开始,步长为2。此种方法属于特殊方法
发表于 2011-3-15 22:12:02 | 显示全部楼层
记得网上有个判断素数的正则表达式,
虽然findstr不支持分组捕获,但也是可以应用到BAT中的。
发表于 2011-3-15 22:27:04 | 显示全部楼层
一种方法吧,不见得速度快。
  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. )
复制代码
发表于 2011-3-16 10:43:47 | 显示全部楼层
发表于 2011-3-16 13:38:44 | 显示全部楼层
用一个数除去所有小于他的素数,凡是不能被整除的必为素数
发表于 2011-3-16 13:43:12 | 显示全部楼层
  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技术 +1 收起 理由
qzwqzw + 1 这个思路早就有人想到了 应该是在5楼的链接 ...

查看全部评分

 楼主| 发表于 2011-3-16 15:41:30 | 显示全部楼层

回复 2楼 的帖子

1、set /a n=%%a-1帮忙解释下为什么是%%a-1?
2、那为什么前面%%a的步长是2不是1?
 楼主| 发表于 2011-3-16 15:51:38 | 显示全部楼层

回复 7楼 的帖子

大哥你这段我看不懂啊。。能详细解释下吗
发表于 2011-3-16 17:28:08 | 显示全部楼层
1,是代码看不明白,还是思路不明白
2,如果是思路,那只能说明你的数学没学好了
奇数*奇数=奇数
奇数*偶数=偶数
偶数*偶数=偶数
除了2以外的偶数都是合数(主要是指正整数),而合数至少要有3个约数,自身还有1就是其中之2。约数是不可能超过自身的。所以就是这样了。
在学校里,我只是个不喜欢上劲的学生,也只能说到这样了
 楼主| 发表于 2011-3-16 17:42:18 | 显示全部楼层

回复 10楼 的帖子

汗一个。。。小弟不只数学不好语文也不好。。你说的这些不知道跟我问的问题有什么必然联系。。越迷糊了。。唉
发表于 2011-3-16 23:19:14 | 显示全部楼层
11楼对素数的定义了解吗?如果了解,可以把所有的合数当成分子来看,素数就是原子,只有原子才不是由多个原子组成的。如果你说化学也不好,那我没话说了...
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 05:42 , Processed in 0.015872 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表