一个线性筛的多功能组合:筛法求质数+约数个数+约数和

F:\BC\2024\9>main1
活动代码页: 936
2  2X2=4
3  3X2=6  3X3=9
4X2=8
5  5X2=10  5X3=15  5X5=25
6X2=12
7  7X2=14  7X3=21  7X5=35  7X7=49
8X2=16
9X2=18  9X3=27
10X2=20
11  11X2=22  11X3=33  11X5=55  11X7=77  11X11=121
12X2=24
13  13X2=26  13X3=39  13X5=65  13X7=91  13X11=143  13X13=169
14X2=28
15X2=30  15X3=45
16X2=32
17  17X2=34  17X3=51  17X5=85  17X7=119  17X11=187  17X13=221  17X17=289
18X2=36
19  19X2=38  19X3=57  19X5=95  19X7=133  19X11=209  19X13=247
20X2=40
21X2=42  21X3=63
22X2=44
23  23X2=46  23X3=69  23X5=115  23X7=161  23X11=253  23X13=299
24X2=48
25X2=50  25X3=75  25X5=125
26X2=52
27X2=54  27X3=81
28X2=56
29  29X2=58  29X3=87  29X5=145  29X7=203
30X2=60
31  31X2=62  31X3=93  31X5=155  31X7=217
32X2=64
33X2=66  33X3=99
34X2=68
35X2=70  35X3=105  35X5=175
36X2=72
37  37X2=74  37X3=111  37X5=185  37X7=259
38X2=76
39X2=78  39X3=117
40X2=80
41  41X2=82  41X3=123  41X5=205  41X7=287
42X2=84
43  43X2=86  43X3=129  43X5=215
44X2=88
45X2=90  45X3=135
46X2=92
47  47X2=94  47X3=141  47X5=235
48X2=96
49X2=98  49X3=147  49X5=245
50X2=100
51X2=102  51X3=153
52X2=104
53  53X2=106  53X3=159  53X5=265
54X2=108
55X2=110  55X3=165  55X5=275
56X2=112
57X2=114  57X3=171
58X2=116
59  59X2=118  59X3=177  59X5=295
60X2=120
61  61X2=122  61X3=183
62X2=124
63X2=126  63X3=189
64X2=128
65X2=130  65X3=195
66X2=132
67  67X2=134  67X3=201
68X2=136
69X2=138  69X3=207
70X2=140
71  71X2=142  71X3=213
72X2=144
73  73X2=146  73X3=219
74X2=148
75X2=150  75X3=225
76X2=152
77X2=154  77X3=231
78X2=156
79  79X2=158  79X3=237
80X2=160
81X2=162  81X3=243
82X2=164
83  83X2=166  83X3=249
84X2=168
85X2=170  85X3=255
86X2=172
87X2=174  87X3=261
88X2=176
89  89X2=178  89X3=267
90X2=180
91X2=182  91X3=273
92X2=184
93X2=186  93X3=279
94X2=188
95X2=190  95X3=285
96X2=192
97  97X2=194  97X3=291
98X2=196
99X2=198  99X3=297
100X2=200
101  101X2=202
102X2=204
103  103X2=206
104X2=208
105X2=210
106X2=212
107  107X2=214
108X2=216
109  109X2=218
110X2=220
111X2=222
112X2=224
113  113X2=226
114X2=228
115X2=230
116X2=232
117X2=234
118X2=236
119X2=238
120X2=240
121X2=242
122X2=244
123X2=246
124X2=248
125X2=250
126X2=252
127  127X2=254
128X2=256
129X2=258
130X2=260
131  131X2=262
132X2=264
133X2=266
134X2=268
135X2=270
136X2=272
137  137X2=274
138X2=276
139  139X2=278
140X2=280
141X2=282
142X2=284
143X2=286
144X2=288
145X2=290
146X2=292
147X2=294
148X2=296
149  149X2=298

151

157

163

167

173

179

181

191

193

197

199

211

223

227

229

233

239

241

251

257

263

269

271

277

281

283

293


=========================
0:
下标为0的素数是2
1:
下标为1的素数是3
2:
下标为2的素数是5
分析2是不是素数,值为0则是素数 0
2中最小质因数的个数是1个
2去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
2的因子的个数是2个
2的因子和是3


3:
下标为3的素数是7
分析3是不是素数,值为0则是素数 0
3中最小质因数的个数是1个
3去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
3的因子的个数是2个
3的因子和是4


4:
下标为4的素数是11
分析4是不是素数,值为0则是素数 1
4中最小质因数的个数是2个
4去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
4的因子的个数是3个
4的因子和是7


5:
下标为5的素数是13
分析5是不是素数,值为0则是素数 0
5中最小质因数的个数是1个
5去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
5的因子的个数是2个
5的因子和是6


6:
下标为6的素数是17
分析6是不是素数,值为0则是素数 1
6中最小质因数的个数是1个
6去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是4
6的因子的个数是4个
6的因子和是12


7:
下标为7的素数是19
分析7是不是素数,值为0则是素数 0
7中最小质因数的个数是1个
7去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
7的因子的个数是2个
7的因子和是8


8:
下标为8的素数是23
分析8是不是素数,值为0则是素数 1
8中最小质因数的个数是3个
8去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
8的因子的个数是4个
8的因子和是15


9:
下标为9的素数是29
分析9是不是素数,值为0则是素数 1
9中最小质因数的个数是2个
9去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
9的因子的个数是3个
9的因子和是13


10:
下标为10的素数是31
分析10是不是素数,值为0则是素数 1
10中最小质因数的个数是1个
10去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是6
10的因子的个数是4个
10的因子和是18


11:
下标为11的素数是37
分析11是不是素数,值为0则是素数 0
11中最小质因数的个数是1个
11去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
11的因子的个数是2个
11的因子和是12


12:
下标为12的素数是41
分析12是不是素数,值为0则是素数 1
12中最小质因数的个数是2个
12去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是4
12的因子的个数是6个
12的因子和是28


13:
下标为13的素数是43
分析13是不是素数,值为0则是素数 0
13中最小质因数的个数是1个
13去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
13的因子的个数是2个
13的因子和是14


14:
下标为14的素数是47
分析14是不是素数,值为0则是素数 1
14中最小质因数的个数是1个
14去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是8
14的因子的个数是4个
14的因子和是24


15:
下标为15的素数是53
分析15是不是素数,值为0则是素数 1
15中最小质因数的个数是1个
15去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是6
15的因子的个数是4个
15的因子和是24


16:
下标为16的素数是59
分析16是不是素数,值为0则是素数 1
16中最小质因数的个数是4个
16去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
16的因子的个数是5个
16的因子和是31


17:
下标为17的素数是61
分析17是不是素数,值为0则是素数 0
17中最小质因数的个数是1个
17去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
17的因子的个数是2个
17的因子和是18


18:
下标为18的素数是67
分析18是不是素数,值为0则是素数 1
18中最小质因数的个数是1个
18去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是13
18的因子的个数是6个
18的因子和是39


19:
下标为19的素数是71
分析19是不是素数,值为0则是素数 0
19中最小质因数的个数是1个
19去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
19的因子的个数是2个
19的因子和是20


20:
下标为20的素数是73
分析20是不是素数,值为0则是素数 1
20中最小质因数的个数是2个
20去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是6
20的因子的个数是6个
20的因子和是42
 

  #include<iostream>
 using namespace std;

 #define n 100000
 #define N n+1
 
 int m;
 int a[N],b[N],c[N],d[N];  
 //a[i]  表示i是否为质数
 //b[i]  表示第i个质数 
 //c[i]  表示i的最小质因数个数 
 //d[i]  表示i的最小质因数
 
 int f[N],g[N]; //f[i]表示i的约数个数 g[i]表示i的约数和
 
 void init()
 {
	 f[1]=g[1]=1;
	 for(int i=2;i<=n;i++){
	 	if(!a[i]){
            if(i<300)
                printf("%d  ",i);
			b[m++]=i;
			c[i]=1,f[i]=2;
			d[i]=1,g[i]=i+1;
		}
		for(int j=0;j<m&&b[j]*i<=n;j++){
			int k=b[j];
			a[i*k]=1;
            if(i*k<300)
                printf("%dX%d=%d  ",i,k,i*k);
			if(i%k==0){
				c[i*k]=c[i]+1;
				f[i*k]=f[i]/c[i*k]*(c[i*k]+1);
				d[i*k]=d[i];
				g[i*k]=g[i]*k+d[i];
				break;
			}
			else{
				c[i*k]=1;
				f[i*k]=2*f[i];	                
				d[i*k]=g[i];
				g[i*k]=g[i]*(k+1);
			}            
		}  
        if(i<300)     
            puts("");
	 }

cout<<"========================="<<endl;
for(int x=0;x<=20;x++){
    cout<<x<<":"<<endl;
    printf("下标为%d的素数是%d\n",x,b[x]);
    if(x==0||x==1)continue;
    
     printf("分析%d是不是素数,值为0则是素数 %d\n",x,a[x]);     
     printf("%d中最小质因数的个数是%d个\n",x,c[x]);
     printf("%d去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是%d\n",x,d[x]);
	 printf("%d的因子的个数是%d个\n",x,f[x]);
     printf("%d的因子和是%d\n",x,g[x]);
     puts("");
     puts("");
}

 }

 int main()
 {
    system("chcp 936");
	 init();
	
	 int x;
	 scanf("%d",&x);
     printf("下标为%d的素数是%d\n",x,b[x]);
     printf("分析%d是不是素数,值为0则是素数 %d\n",x,a[x]);     
     printf("%d中最小质因数的个数是%d个\n",x,c[x]);
     printf("%d去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是%d\n",x,d[x]);
	 printf("%d的因子的个数是%d个\n",x,f[x]);
     printf("%d的因子和是%d\n",x,g[x]);
     puts("");
     puts("");
	 return 0;
 }
/*
输入30
答案是 8和 72
1 2 3 5 6 10 15 30
*/


F:\BC\2024\9>main1
活动代码页: 936
=========================
0:
下标为0的素数是2
1:
下标为1的素数是3
2:
下标为2的素数是5
分析2是不是素数,值为0则是素数 0
2中最小质因数的个数是1个
2去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
2的因子的个数是2个
2的因子和是3


3:
下标为3的素数是7
分析3是不是素数,值为0则是素数 0
3中最小质因数的个数是1个
3去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
3的因子的个数是2个
3的因子和是4


4:
下标为4的素数是11
分析4是不是素数,值为0则是素数 1
4中最小质因数的个数是2个
4去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
4的因子的个数是3个
4的因子和是7


5:
下标为5的素数是13
分析5是不是素数,值为0则是素数 0
5中最小质因数的个数是1个
5去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
5的因子的个数是2个
5的因子和是6


6:
下标为6的素数是17
分析6是不是素数,值为0则是素数 1
6中最小质因数的个数是1个
6去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是4
6的因子的个数是4个
6的因子和是12


7:
下标为7的素数是19
分析7是不是素数,值为0则是素数 0
7中最小质因数的个数是1个
7去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
7的因子的个数是2个
7的因子和是8


8:
下标为8的素数是23
分析8是不是素数,值为0则是素数 1
8中最小质因数的个数是3个
8去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
8的因子的个数是4个
8的因子和是15


9:
下标为9的素数是29
分析9是不是素数,值为0则是素数 1
9中最小质因数的个数是2个
9去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
9的因子的个数是3个
9的因子和是13


10:
下标为10的素数是31
分析10是不是素数,值为0则是素数 1
10中最小质因数的个数是1个
10去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是6
10的因子的个数是4个
10的因子和是18


11:
下标为11的素数是37
分析11是不是素数,值为0则是素数 0
11中最小质因数的个数是1个
11去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
11的因子的个数是2个
11的因子和是12


12:
下标为12的素数是41
分析12是不是素数,值为0则是素数 1
12中最小质因数的个数是2个
12去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是4
12的因子的个数是6个
12的因子和是28


13:
下标为13的素数是43
分析13是不是素数,值为0则是素数 0
13中最小质因数的个数是1个
13去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
13的因子的个数是2个
13的因子和是14


14:
下标为14的素数是47
分析14是不是素数,值为0则是素数 1
14中最小质因数的个数是1个
14去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是8
14的因子的个数是4个
14的因子和是24


15:
下标为15的素数是53
分析15是不是素数,值为0则是素数 1
15中最小质因数的个数是1个
15去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是6
15的因子的个数是4个
15的因子和是24


16:
下标为16的素数是59
分析16是不是素数,值为0则是素数 1
16中最小质因数的个数是4个
16去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
16的因子的个数是5个
16的因子和是31


17:
下标为17的素数是61
分析17是不是素数,值为0则是素数 0
17中最小质因数的个数是1个
17去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
17的因子的个数是2个
17的因子和是18


18:
下标为18的素数是67
分析18是不是素数,值为0则是素数 1
18中最小质因数的个数是1个
18去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是13
18的因子的个数是6个
18的因子和是39


19:
下标为19的素数是71
分析19是不是素数,值为0则是素数 0
19中最小质因数的个数是1个
19去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是1
19的因子的个数是2个
19的因子和是20


20:
下标为20的素数是73
分析20是不是素数,值为0则是素数 1
20中最小质因数的个数是2个
20去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是6
20的因子的个数是6个
20的因子和是42


99
下标为99的素数是541
分析99是不是素数,值为0则是素数 1
99中最小质因数的个数是2个
99去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是12
99的因子的个数是6个
99的因子和是156

  #include<iostream>
 using namespace std;

 #define n 100000
 #define N n+1
 
 int m;
 int a[N],b[N],c[N],d[N];  
 //a[i]  表示i是否为质数
 //b[i]  表示第i个质数 
 //c[i]  表示i的最小质因数个数 
 //d[i]  去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],
 
 int f[N],g[N]; //f[i]表示i的约数个数 g[i]表示i的约数和
 
 void init()
 {
	 f[1]=g[1]=1;
	 for(int i=2;i<=n;i++){
	 	if(!a[i]){
			b[m++]=i;
			c[i]=1,f[i]=2;
			d[i]=1,g[i]=i+1;
		}
		for(int j=0;j<m&&b[j]*i<=n;j++){
			int k=b[j];
			a[i*k]=1;
			if(i%k==0){
				c[i*k]=c[i]+1;
				f[i*k]=f[i]/c[i*k]*(c[i*k]+1);
				d[i*k]=d[i];
				g[i*k]=g[i]*k+d[i];
				break;
			}
			else{
				c[i*k]=1;
				f[i*k]=2*f[i];	                
				d[i*k]=g[i];
				g[i*k]=g[i]*(k+1);
			}
		}
	 }

cout<<"========================="<<endl;
for(int x=0;x<=20;x++){
    cout<<x<<":"<<endl;
    printf("下标为%d的素数是%d\n",x,b[x]);
    if(x==0||x==1)continue;
    
     printf("分析%d是不是素数,值为0则是素数 %d\n",x,a[x]);     
     printf("%d中最小质因数的个数是%d个\n",x,c[x]);
     printf("%d去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是%d\n",x,d[x]);
	 printf("%d的因子的个数是%d个\n",x,f[x]);
     printf("%d的因子和是%d\n",x,g[x]);
     puts("");
     puts("");
}

 }

 int main()
 {
    system("chcp 936");
	 init();
	
	 int x;
	 scanf("%d",&x);
     printf("下标为%d的素数是%d\n",x,b[x]);
     printf("分析%d是不是素数,值为0则是素数 %d\n",x,a[x]);     
     printf("%d中最小质因数的个数是%d个\n",x,c[x]);
     printf("%d去掉此数的最小质因子得到的数[注意,最小质因子可能有多个],这个数的因子和是%d\n",x,d[x]);
	 printf("%d的因子的个数是%d个\n",x,f[x]);
     printf("%d的因子和是%d\n",x,g[x]);
     puts("");
     puts("");
	 return 0;
 }
/*
输入30
答案是 8和 72
1 2 3 5 6 10 15 30
*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值