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

[其他] C运行速度快批处理好多啊!(计算1000以内质数)

本帖最后由 Gin_Q 于 2019-12-14 11:43 编辑

先是批处理的:
  1. @echo off & setlocal enabledelayedexpansion
  2. set time_sta=%time%
  3. set /p count=1000
  4. for /l %%a in (2,1,%count%) do (if %%a GTR 2 (set /a temp=%%a-1)
  5. set /a is_prime=1
  6. for /l %%b in (2,1,!temp!) do (
  7. set /a temp1=%%a%%%%b
  8. if !temp1! EQU 0 ( set /a is_prime = 0 ))
  9. if !is_prime! EQU 1 (echo %%a是一个质数!
  10. >>te1.txt echo %%a是一个质数!& set /a sum+=1
  11. ) else (echo %%a是一个合数!
  12. >>te1.txt echo %%a是一个合数!& set /a sum_1+=1))
  13. echo;质数有%sum%个
  14. >>te1.txt echo 质数有%sum%个
  15. echo;合数有%sum_1%个
  16. >>te1.txt echo 合数有%sum_1%个
  17. echo;开始时间为%time_sta%
  18. echo;结束时间为%time%
  19. pause & exit
复制代码
结果:
2是一个质数!
3是一个质数!
...
990是一个合数!
991是一个质数!
992是一个合数!
993是一个合数!
994是一个合数!
995是一个合数!
996是一个合数!
997是一个质数!
998是一个合数!
999是一个合数!
1000是一个合数!
质数有168个
合数有831个
开始时间为11:39:13.91
结束时间为11:39:29.11
请按任意键继续. . .

----------------------------------------------------------分割线---------------------------------------------------------
C:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int prime(int n)
  4. {
  5. int is_prime = 1, i;
  6. if (n < 0)
  7. {
  8. return -1;
  9. }
  10. for (i=2; i<n; i++)
  11. {
  12. if (n % i == 0)
  13. {
  14. is_prime = 0;
  15. break;
  16. }
  17. }
  18. return is_prime;
  19. }
  20. int main()
  21. {
  22. FILE *fp;
  23. if ((fp = fopen("D:\\GIN\\temp\\te.txt", "w")) == NULL)
  24. {
  25. printf("fail to open file!");
  26. exit(0);
  27. }
  28. int a = 1000, b, i, sum = 0, sum_1 = 0;
  29. //printf("请输入一个整数:");
  30. //scanf("%d", &a);
  31. for (i=2; i<=a; i++)
  32. {
  33. b = prime(i);
  34. if (b == 0)
  35. {
  36. sum++;
  37. printf("%d是一个合数!\n", i);
  38. fprintf(fp, "%d是一个合数!\n", i);
  39. }
  40. else
  41. {
  42. sum_1++;
  43. printf("%d是一个质数!\n", i);
  44. fprintf(fp, "%d是一个质数!\n", i);
  45. }
  46. }
  47. printf("质数有%d个\n", sum_1);
  48. printf("合数有%d个\n", sum);
  49. fprintf(fp,"质数有%d个\n质数有%d个\n", sum_1, sum);
  50. fclose(fp);
  51. return 0;
  52. }
复制代码
结果:
2是一个质数!
3是一个质数!
...
990是一个合数!
991是一个质数!
992是一个合数!
993是一个合数!
994是一个合数!
995是一个合数!
996是一个合数!
997是一个质数!
998是一个合数!
999是一个合数!
1000是一个合数!
质数有168个
合数有831个

--------------------------------
Process exited after 0.1504 seconds with return value 0
请按任意键继续. . .

我是一个新手,好奇就自己写了一下作对比,代码肯定不是最优的(对于我已经是现在能力所及的了)

TOP

我就简单的和你说吧,只要算法不垃圾,越低级语言越快。汇编比C语言更快,你自己想想“批处理”在哪一个级别。
1

评分人数

    • Gin_Q: 赞成!就是学的很费劲!技术 + 1
#&cls&@powershell "Invoke-Expression ([Io.File]::ReadAllText('%~0',[Text.Encoding]::UTF8))" &pause&exit

TOP

同样的逻辑同样的算法,当然是静态编译的比较快啦。

nim语言 兼具接近C语言的性能,又有python代码风格的简洁,少年来看看吗?
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

回复 1# Gin_Q


    第一次我搞错,两个那个脚本运行时间是包含了我输入数字的时间,后面更新了

TOP

回复 5# Gin_Q


    再改一下啊。偶试写了下:powershell  0.12秒左右。C# 0.002秒左右
QQ: 己阵亡
脚本优先 [PowerShell win10]

TOP

回复 6# xczxczxcz


    大佬,我能力有限呢!(我这个是打印的答案,还保存了一份一摸一样的日志)

TOP

本帖最后由 terse 于 2019-12-14 17:07 编辑

P会溢出唉~
改里面循环3开始递增2
  1. @echo off & setlocal enabledelayedexpansion
  2. set time_sta=%time%
  3. set /a count=1000,sum=sum_1=0,f=1
  4. for /l %%a in (2,1,%count%) do (
  5.      if %%a gtr 2 (
  6.         set /at=2,p=%%a,f=p%%2
  7.         if !f! neq 0 (
  8.            for /l %%p in (1,1,8) do (
  9.                 set /a "t=(p/t+t)/2,n=t*t,r=t,y=p-n"
  10.                 if !n! gtr !p! set /a "t=(p/t+t)/2,n=t*t,r=t,y=p-n"
  11.            )
  12.            REM set /at+-1
  13.            for /l %%b in (3,2,!t!) do (
  14.                 set /a t1=%%a %% %%b
  15.                 if !t1! equ 0  set f=0
  16.            )
  17.          )
  18.      )
  19.         if !f! equ 0 (
  20.                  set /a sum_1+=1
  21.                  echo %%a是一个合数!
  22.         ) else (
  23.              set /asum+=1
  24.              echo %%a是一个质数!
  25.        )
  26. )
  27. echo;质数有%sum%个
  28. echo;合数有%sum_1%个
  29. echo;开始时间为%time_sta%
  30. echo;结束时间为%time%
  31. pause & exit
复制代码
1

评分人数

TOP

回复 4# codegay

现在还搞不了,大佬!

TOP

回复 9# Gin_Q


    nim语言应该是比C容易学。
去学去写去用才有进步。安装python3代码存为xx.py 双击运行或右键用IDLE打开按F5运行

TOP

返回列表