重點:
1.數組P[101]:若i爲素數,則P[i]=1,反正,P[i]=0;
2.數組primer[]:依次爲每個素數,2,3,5,7,11...
3.數組result[101]:若2的指數爲i,則result[2] = i;
程序先生成前兩個數組,然後根據輸入n,遍歷i = 2,3,...,n,若其爲素數,則result[i]++;反之,則依次除primer[0,1,2,...]直到爲素數
代碼如下:
#include <iostream>
#include <math.h>
#include <string.h>
#define N 100
int P[N+1];
int primer[N];
int result[N+1];//101
using namespace std;
void GetPrimer();
int main()
{
GetPrimer();
int n;
cin >> n;
memset(result,0,sizeof(result));
for(int i=2 ; i<=n ; i++){
if(P[i] == 1){
result[i]++;
}
else{
int j = i;
for(int k=0 ; P[j]!=1 ; ){
if(j % primer[k] == 0){
result[primer[k]] ++;
j = j / primer[k];
}
else{
k++;
}
}
result[j] ++;
}
}
int first = 1;
for(int i=0 ; i<=n ; i++){
if(result[i] != 0){
if(first == 1){
cout << n << "!=" << result[i];
first = 0;
}
else{
cout << " " << result[i];
}
}
}
cout << endl;
return 0;
}
void GetPrimer()
{
memset(P,0,sizeof(P));
P[2] = 1;
primer[0] = 2;
int index = 1;
for(int i=3 ; i<=N ; i++){
int j=2;
for( ; j<=floor(sqrt(i)+0.5) ; j++){
if(i % j == 0){
break;
}
}
if(j == floor(sqrt(i)+0.5)+1){
P[i] = 1;
primer[index++] = i;
}
}
}