网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月16日漏签0天
vb吧 关注:156,110贴子:1,166,216
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 15回复贴,共1页
<<返回vb吧
>0< 加载中...

求化简一下代码

  • 只看楼主
  • 收藏

  • 回复
  • 战略吓唬炮座
  • 暴力枚举
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
RT,题目是输入一个数,判断其能不能被两个质数整除,代码如下:
Dim a, i, c(), s, j, num As Double
Dim flag1, flag2, flag3 As Boolean
flag1 = True
flag2 = True
flag3 = False
a = Val(Text1.Text)
For i = 4 To a - 1
For j = 2 To i - 1
If i Mod j = 0 Then flag1 = False
Next j
If flag1 = True Then
num = num + 1
Else
flag1 = True
End If
Next i
num = num + 2
ReDim c(1 To num)
c(1) = 2
c(2) = 3
s = 3
For i = 4 To a - 1
For j = 2 To i - 1
If i Mod j = 0 Then flag2 = False
Next j
If flag2 = True Then
c(s) = i
s = s + 1
Else
flag2 = True
End If
Next i
For i = 1 To num - 1
For j = i + 1 To num
If c(i) * c(j) = a Then
flag3 = True
MsgBox (Text1.Text + "是" + Trim(Str(c(i))) + "和" + Trim(Str(c(j))) + "这两个质数的积。")
Exit For
End If
Next j
Next i
If flag3 = False Then MsgBox (Text1.Text + "不能由两个质数相乘得到。")


  • 战略吓唬炮座
  • 暴力枚举
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
声明一下,LZ学校只教过静态数组的定义,连动态数组的定义和boolean都是百度自学的,所以不要搞些高端的函数


2025-07-16 13:46:46
广告
  • 冰之源___
  • 暴力枚举
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
要速度的话可以 Miller_Rabin+Pollard_rho
如果只是想短,可以这么写
Function isPn(Byval x As Integer) As Boolean
Dim ed = sqr(x) As Integer
For i = 2 To ed Stpe 1
If i Mod ed = 0 Return False
Next
Return True
End Function
Sub Calc(Byval x)
Dim ed = sqr(x) As Integer
For i = 2 To ed Step 1
If x Mod i = 0 Then
If Not isPn(x) Then ..... ' Output False
If Not isPn(x/i) Then ...... ' Output False
Next
....Output True
End Sub


  • 战略吓唬炮座
  • 暴力枚举
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
等等,题目的意思是判断一个数是不是两个质数的 积,1L题目可忽视


  • 初音七奈
  • 钩子编程
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我觉得你确实把思路搞复杂了
不过,我想先弄清楚一个问题:你到底是要【判断一个数是否能被至少两个不同的质数整除】,还是要【判断一个数是否能表示成两个质数之积】?这两个问题含义可是不同的
无论哪种理解,我的思路都是:对输入的数分解质因数,如果能分解出两个不同的质因数,则【理解1】下这个数符合条件,否则不符合;如果只能分解成两个质因数之积,则【理解2】下这个数符合条件,否则不符合;程序算法只需要对质因数【计数】即可,无需判断质数(分解质因数的算法自然可以筛选出质数来),也用不到数组和Boolean型变量


  • 冰之源___
  • 暴力枚举
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

c++更简单,6行代码的事


  • 初音七奈
  • 钩子编程
    15
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我也写一下我的想法的VB代码吧:
Dim a As Long, i As Long, k As Long, n As Long
a = Val(Text1.Text)
i = 2
Do While i <= Sqr(a) And k < 2
Do While a Mod i = 0 And k < 2
n = i
a = a \ i
k = k + 1
Loop
i = i + 1
Loop
If k = 2 And a = 1 Then '如果原数恰为一个质数的平方
MsgBox Text1.Text & "=" & n & "*" & n
ElseIf k = 1 Then '如果原数只分解出了一个质因数,还剩下一个不能分解的部分
MsgBox Text1.Text & "=" & n & "*" & a
Else '其他情况,要么原数是质数(此时k=0),要么分解出了2个质因数之后a仍然大于1
MsgBox Text1.Text & "不能由两个质数相乘得到"
End If


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 15回复贴,共1页
<<返回vb吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示