1.给定n个不同的正整数(小于等于100),将它们分组,使得每组中任意两个数互质(它们的公约数为1)。按照以下算法对n个数进行分组:
n个正整数由文本框Text1输入,依次存储到a数组中,b(1 to 25)中存储100内的素数,c数组存储每一组的数字个数及对应数字,d数组存储每一组内所含的质因子,相同质因子只存储一次,最后分组情况显示在列表框List1中。
c数组初始状态:
组别 |
第一组 |
第二组 |
… |
位置 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
… |
值 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
… |
d数组初始状态:
组别 |
第一组 |
第二组 |
… |
位置 |
1 |
2 |
3 |
4 |
5 |
6 |
… |
25 |
26 |
27 |
28 |
29 |
30 |
… |
50 |
… |
值 |
0 |
0 |
0 |
0 |
0 |
0 |
… |
0 |
0 |
0 |
0 |
0 |
0 |
… |
0 |
… |
若第一个数据为70,确定分组的过程为:先查找第一组内所含的质因子中是否含有70的质因子,未找到,则c数组中表示第一组数据个数的值加1,并将70添加到c数组的第一组内,同时在d数组第一组中依次添加70所含的各个质因子。
c数组变化情况:
组别 |
第一组 |
第二组 |
… |
位置 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
… |
值 |
1 |
70 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
… |
d数组变化情况:
组别 |
第一组 |
第二组 |
… |
位置 |
1 |
2 |
3 |
4 |
5 |
6 |
… |
25 |
26 |
27 |
28 |
29 |
30 |
… |
50 |
… |
值 |
2 |
5 |
7 |
0 |
0 |
0 |
… |
0 |
0 |
0 |
0 |
0 |
0 |
… |
0 |
… |
尝试将第2~n个整数分组。在确定某数分组的过程中,若已有的组内不存在该数所含的质因子,则将其分到第一个符合条件的组;否则,将其分到新生成的组中。
分组完毕后数组存储情况如表。
c数组:
组别 |
第一组 |
第二组 |
… |
位置 |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
… |
值 |
2 |
70 |
99 |
0 |
0 |
0 |
0 |
3 |
25 |
54 |
11 |
0 |
0 |
0 |
… |
d数组:
组别 |
第一组 |
第二组 |
… |
位置 |
1 |
2 |
3 |
4 |
5 |
6 |
… |
25 |
26 |
27 |
28 |
29 |
30 |
… |
50 |
… |
值 |
2 |
5 |
7 |
3 |
11 |
0 |
… |
0 |
5 |
2 |
3 |
11 |
0 |
… |
0 |
… |
按照上述要求编写一个VB程序,其运行界面如图所示。
![菁优网](https://img.jyeoo.net/quiz/images/202103/181/26aef279.png)
(1)按照上述算法,若有“35、40、26、18、63、77”6个整数,至少分成
组(填具体数字)。
(2)请在横线处填入合适的代码。
Const n=6'数据个数
Dim a(1 To n) As Integer'存储原始数据
Dim b(1 To 25)As Integer'存储100以内的素数
Dim c(0 To (n+1)*n) As Integer'存储每一组的数字个数及对应数字
Dim d(1 To 25*n) As Integer'd数组存储每一组内含有的质因子
Private Sub Command1_Click
Dim t As Integer,i As Integer,j As Integer
Dim k As Integer,m As Integer,p As Integer
Dim y As Integer,zu As Integer
Dim st As String
For t=1 To n
k=1
i=1
Do While d((k-1)*25+i)<>0
If a(t) Mod d((k-1)*25+i)=0 Then
①
i=0
End If
i=i+1
Loop
m=(k-1)*(n+1)'每一组存储数字个数的所在位置
c(m)=c(m)+1
②
For j=1 To 25
If a(t) Mod b(j)=0 Then
③
i=i+1
End If
Next j
Next t
p=0
Do While c(p)>0
st=““
For i=1 To c(p)
st=st+Str(c(p+i))
Next i
zu=p\(n+1)+1
List1.AddItem“第“+CStr(zu)+“组为:“+st
'Cstr的功能:将数值型转为字符串型
p=p+n+1
y=y+1
Loop
List1.AddItem“至少分:“+CStr(y)+“组“
End Sub
Private Sub Form_Load
'读取文本框Text1中的各个数据依次存储到数组a中,存储100以内的素数到数组b中,代码略
End Sub