-
Notifications
You must be signed in to change notification settings - Fork 0
/
160 - Factors and Factorials.cpp
77 lines (71 loc) · 1.15 KB
/
160 - Factors and Factorials.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <string.h>
#include <math.h>
#include <stdio.h>
using namespace std;
const int maxn =100+5;
int isPrime[maxn];
void Prime(){
for(int i=2;i<=maxn;i++){
isPrime[i]=-1;
}
for(int i=2;i<=maxn;i++){
if(isPrime[i]==-1)
for(int j=i;j*i<=maxn;j++){
isPrime[j*i]=i;
}
}
}
int bangma[101][101];
int factor(int i,int n){
if(isPrime[n]==-1) {
bangma[i][n]++;
return 1;
}
else{
bangma[i][isPrime[n]]++;
factor(i,n/isPrime[n]);
}
}
void tinhtoan(){
Prime();
for(int i=2;i<=100;i++){
for(int j=2;j<=i;j++){
bangma[i][j]=0;
}
}
// tinh gia tri moi con so
bangma[2][2]++;
for(int i=3;i<=100;i++){
for(int j=2;j<=i;j++){
bangma[i][j]=bangma[i-1][j];
}
if(isPrime[i]==-1) bangma[i][i]++;
else {
factor(i,i);
}
}
}
int main(){
// freopen("ip.txt","r",stdin);
// freopen("rs.txt","w",stdout);
tinhtoan();
int n;
while(cin>> n){
if(n==0) break;
int dem=0;
printf("%3d! =",n);
for(int i=2;i<=n;i++){
if(dem==15 && isPrime[i]==-1) {
cout << endl;
printf(" ");
dem=0;
}
if(isPrime[i]==-1){
printf("%3d",bangma[n][i]);
++dem;
}
}
cout << endl;
}
}