A1059
#include<bits/stdc++.h>
using namespace std;
//判断一个数是否为素数
bool isprime(int n){
if(n<=1) return false;
int sqr=int(sqrt(1.0*n));
for(int i=2;i<=sqr;i++)
{
if(n%i==0) return false;
}
return true;
}
//求素数表
const int maxn=100010;
int prime[maxn],pnum=0;
void find_prime(){
for(int i=1;i<maxn;i++){
if(isprime(i)==true){
prime[pnum++]=i;
}
}
}
//结构体
struct factor{
int x,cnt;//x为质因子,cnt为个数
}fac[10];
int main()
{
find_prime();//求素数表,求1-100010的素数表
int n,num=0;
scanf("%d",&n);
if(n==1) printf("1=1");//1要特殊考虑
else{
printf("%d=",n);
int sqr=(int)sqrt(1.0*n);
for(int i=0;i<pnum&&prime[i]<=sqr;i++)
{
if(n%prime[i]==0){
fac[num].x=prime[i];
fac[num].cnt=0;
while(n%prime[i]==0){
fac[num].cnt++;
n/=prime[i];
}
num++;
}
if(n==1) break;//及时退出循环,节省时间
}
if(n!=1){//如果无法被根号n以内的质因子除尽
fac[num].x=n;//一定有一个大于根号n的质因子
fac[num++].cnt=1;
}
for(int i=0;i<num;i++){
if(i>0) printf("*");
printf("%d",fac[i].x);
if(fac[i].cnt>1){
printf("^%d",fac[i].cnt);
}
}
}
return 0;
}
A1096 consecutive factors
其实很简单
#include<bits/stdc++.h>
using namespace std;
int N;
int main()
{
cin>>N;
int i,j,k;
int ans_start=N;
int ans_length=1;
for(i=2;i<sqrt(N);i++)
{
//不断尝试用i作为因数链的开头
//看看能找多长的链
for(j=i,k=N;k%j==0;j++)
{
k/=j;
}
if(j-i>ans_length||(j-i==ans_length&&i<ans_start))
{
ans_length=j-i;//更新长度
ans_start=i;
}
}
cout<<ans_length<<endl;
for(i=ans_start;i<ans_start+ans_length;i++){
if(i>ans_start) cout<<"*";
cout<<i;
}
return 0;
}