返回目录
题意
给出一个int范围的整数,按照从小到大的顺序输出其分界为质因数(素数)的乘法算式。
样例(可复制)
97532468
//output
97532468=2^2*11*17*101*1291
提供几个易错的数据
1
//output
1=1
7
//output
7=7
8
//output
8=2^3
9
//output
9=3^2
2147483647
//output
2147483647=2147483647
2147483646
//output
2147483646=2*3^2*7*11*31*151*331
注意点
- 本题先求出一定范围的素数,再从小到大对每个素数进行判断是否能整除即可
#include<bits/stdc++.h>
using namespace std;
bool isprime(int a){
int sqr=(int)sqrt(1.0*a);
for(int i=2;i<=sqr;i++)
if(a%i==0)return false;
return true;
}
int main(){
int n;
cin>>n;
int prime[100010],j=0;
for(int i=2;i<100010;i++){
if(isprime(i))prime[j++]=i;
}
cout<<n<<"=";
int sum=j;
j=0;
while(n!=1&&j<sum){
int count=0;
while(n%prime[j]==0){
n/=prime[j];
count++;
}
if(count>0){
if(count==1)cout<<prime[j];
else cout<<prime[j]<<"^"<<count;
if(n!=1)cout<<"*";
}
j++;
}
if(j==sum||j==0)cout<<n;
return 0;
}