作者:绿色风
分类:
时间:2022-08-17
浏览:161
楼主 wjc2090742 |
Q:如何枚举10^6内的同构数? A:同构数是会出现在它的平方的右边的数,如5×5=25,6×6=36。 使用下面的代码,下面用循环,递归的方法待花花的大帖:
- Sub abc()
- Dim i As Long
- With CreateObject("scripting.dictionary")
- For i = 1 To 1000000
- If Right$(i ^ 2, Len(CStr(i))) = i Then .Add i, ""
- Next
- [A1].Resize(.Count, 1) = WorksheetFunction.Transpose(.keys)
- End With
- End Sub
同构数.rar |
2楼 wqfzqgk |
- Sub ab()
- a = Timer
- Dim i As Long
- With CreateObject("scripting.dictionary")
- For i = 1 To 1000000 Step 10
- If Right$(i ^ 2, Len(CStr(i))) = i Then .Add i, ""
- Next
- For i = 5 To 1000000 Step 10
- If Right$(i ^ 2, Len(CStr(i))) = i Then .Add i, ""
- Next
- For i = 6 To 1000000 Step 10
- If Right$(i ^ 2, Len(CStr(i))) = i Then .Add i, ""
- Next
- [A1].Resize(.Count, 1) = WorksheetFunction.Transpose(.keys)
- End With
- MsgBox Timer - a
- End Sub
|
3楼 wjc2090742 |
原来在step上做下文章就快了这么多啊,学习了,我是V白,今后还请多多指导。 |
4楼 wqfzqgk |
互相学习,呵呵 |
5楼 liuguansky |
递归不会,在你的基础优化了下,10^8以内的同构生成在0.015左右- Sub abc()
- Const s& = 10 ^ 8
- Dim i&, dic, j&, t
- t = Timer
- Set dic = CreateObject("scripting.dictionary")
- dic.Add 1, ""
- i = 5
- Do While i < s
- If i ^ 2 Like "*" & i Then
- dic.Add i, ""
- j = 10 ^ Len(CStr(i))
- i = j + i
- Else: i = i + j
- End If
- Loop
- i = 6
- Do While i < s
- If i ^ 2 Like "*" & i Then
- dic.Add i, ""
- j = 10 ^ Len(CStr(i))
- i = j + i
- Else: i = i + j
- End If
- Loop
- Range("b:b").Clear
- If dic.Count > 0 Then
- [b1].Resize(dic.Count, 1) = WorksheetFunction.Transpose(dic.keys)
- End If
- Set dic = Nothing
- MsgBox Timer - t
- End Sub
|
免责声明
有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素,
经与ExcelTip.Net站长Apolloh商议并征得其同意,
现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示,
供有需要的人士查询使用,也慰缅曾经的论坛时代。
所示各个帖子的原作者如对版权有异议,
可与本人沟通提出,或于本站点留言,我们会尽快处理。
在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一