首先先筛选出素数数组,不用太大也不要太小,我这里选了10000过了
然后用一个while循环逐级判断,不能直接输出,把结果放在一个数组里最后将得出的结果排序最后再输出即可
本题发现一个问题,memset函数在给数组赋值时,如果不是赋0那么在数组范围很大时比如10000时可能就会出问题,本题出了一次很烦
ac代码如下
#include <iostream>
#include <memory.h>
#include <algorithm>
#include <cmath>
using namespace std;
int sushu[10000];
int ans[10000];
int l=0;
int main()
{
int a,b;
memset(sushu,0,sizeof(sushu));
memset(ans,0,sizeof(ans));
for(int i=2;i<10000;i++){
int count=0;
for(int j=2;j<=sqrt(i);j++){
if(i%j==0)count++;
}
if(count)sushu[i]=1;
}
cin>>a>>b;
for(int i=a;i<=b;i++){
cout<<i<<"=";
int ii=i;
while(1){
for(int j=2;j<=i;j++){
if(!sushu[j]){
if(ii%j==0){
ans[l++]=j;
ii/=j;
if(ii==1)break;
}
}
}
if(ii==1)break;
}
sort(ans,ans+l);
for(int i=0;i<l;i++){
if(i!=l-1)cout<<ans[i]<<"*";
else cout<<ans[i];
}
memset(ans,0,sizeof(ans));
l=0;
cout<<endl;
}
return 0;
}