标题: [数值计算] [已解决]批处理怎么判断素数? [打印本页]
作者: abcdshenji 时间: 2011-3-15 16:26 标题: [已解决]批处理怎么判断素数?
本帖最后由 abcdshenji 于 2011-3-20 03:03 编辑
【程序12】
题目:判断101-200之间有多少个素数,并输出所有素数。
1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
则表明此数不是素数,反之是素数。
随风大哥是这样写的:- @echo off&setlocal EnableDelayedExpansion
-
- for /l %%a in (101 1 200) do (
-
- set /a n=%%a-1&set "flag="
-
- for /l %%b in (2 1 !n!) do (
-
- set /a m=%%a%%%%b
-
- if !m! equ 0 set flag=a
-
- )
-
- if not defined flag echo 素数 %%a
-
- )
-
- echo\&pause
复制代码
youxi01大哥这样写:- @echo off&setlocal EnableDelayedExpansion
-
- for /l %%a in (101 2 200) do (
-
- set "flag="
-
- for /l %%b in (3 2 15) do (
-
- set /a m=%%a %% %%b
-
- if !m! equ 0 set flag=A
-
- )
-
- if not defined flag echo 素数 %%a
-
- )
-
- echo\&pause
复制代码
第一个例子平方根为什么是%%a-1?第二个例子又为什么在(3 2 15)范围循环?
作者: wc726842270 时间: 2011-3-15 19:45
1。平方根在哪里?
2。15的平方>200>14的平方。偶数被过滤了。所以从3开始,步长为2。此种方法属于特殊方法
作者: caruko 时间: 2011-3-15 22:12
记得网上有个判断素数的正则表达式,
虽然findstr不支持分组捕获,但也是可以应用到BAT中的。
作者: caruko 时间: 2011-3-15 22:27
一种方法吧,不见得速度快。- @echo off&setlocal EnableDelayedExpansion
- set "th=1"&set /p=请输入一个数:
- for /l %%i in (1,1,!p!) do (
- set "str=!str!1"
- )
- rem 也可以加上先判断是否偶数。
- for /l %%i in (3,2,!p!) do (
- set "th=!th!11"
- for /f %%j in ("!th!") do (
- if "!str:%%j=!"=="" set "flag=非素"&goto :end
- )
- )
- :end
- if defined flag (
- echo 非素数
- ) else (
- echo 素数
- )
复制代码
作者: batman 时间: 2011-3-16 10:43
请楼主参考此贴:
http://www.bathome.net/thread-4310-1-1.html
作者: CrLf 时间: 2011-3-16 13:38
用一个数除去所有小于他的素数,凡是不能被整除的必为素数
作者: CrLf 时间: 2011-3-16 13:43
- @echo off&setlocal enabledelayedexpansion >素数.tmp 3>素数.tmp
- echo 2
- for /l %%a in (3 2 200) do (
- for /f %%b in (素数.tmp) do set /a "test=1/(%%a%%%%b)"||set tmp=%%a
- if %%a neq !tmp! echo %%a
- ) 2>nul
- type>con 素数.tmp
- pause
复制代码
[ 本帖最后由 zm900612 于 2011-3-16 14:10 编辑 ]
作者: abcdshenji 时间: 2011-3-16 15:41 标题: 回复 2楼 的帖子
1、set /a n=%%a-1帮忙解释下为什么是%%a-1?
2、那为什么前面%%a的步长是2不是1?
作者: abcdshenji 时间: 2011-3-16 15:51 标题: 回复 7楼 的帖子
大哥你这段我看不懂啊。。能详细解释下吗
作者: wc726842270 时间: 2011-3-16 17:28
1,是代码看不明白,还是思路不明白
2,如果是思路,那只能说明你的数学没学好了
奇数*奇数=奇数
奇数*偶数=偶数
偶数*偶数=偶数
除了2以外的偶数都是合数(主要是指正整数),而合数至少要有3个约数,自身还有1就是其中之2。约数是不可能超过自身的。所以就是这样了。
在学校里,我只是个不喜欢上劲的学生,也只能说到这样了
作者: abcdshenji 时间: 2011-3-16 17:42 标题: 回复 10楼 的帖子
汗一个。。。小弟不只数学不好语文也不好。。你说的这些不知道跟我问的问题有什么必然联系。。越迷糊了。。唉
作者: CrLf 时间: 2011-3-16 23:19
11楼对素数的定义了解吗?如果了解,可以把所有的合数当成分子来看,素数就是原子,只有原子才不是由多个原子组成的。如果你说化学也不好,那我没话说了...
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |