Day 33 算法笔记之数学问题 5.5 质因子分解

目录

1.Prime Factors

2.Consecutive Factors


1.Prime Factors

#include <cstdio>
#include <cctype>
#include <cstring>
#include <math.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <sys/time.h>
using namespace std;

const int maxn=100010;

bool is_prime(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;
}

int prime[maxn],pnum=0;
void find_prime(){
	for(int i=1;i<maxn;i++){
		if(is_prime(i)==true){
			prime[pnum++]=i;
		}
	}
}

struct factor{
	int x,cnt;
}fac[10];

int main(){
	
	find_prime();
	int n;
	scanf("%d",&n);
	if(n==1) printf("1=1");
	else{
		printf("%d=",n);
		int num=0;
		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){
			fac[num].x=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;
}

2.Consecutive Factors

#include <cstdio>
#include <cctype>
#include <cstring>
#include <math.h>
#include <iostream>
#include <algorithm>
#include <map>
#include <sys/time.h>
using namespace std;
typedef long long ll;

int main(){
	ll n;
	scanf("%lld",&n);
	ll sqr = (ll)sqrt(1.0*n),ansi=0,anslen=0;
	
	for(ll i=2;i<=sqr;i++){
		ll temp=1,j=i;
		while(1){
			temp*=j;
			if(n%temp!=0) break;
			if(j-i+1>anslen){
				ansi = i;
				anslen = j-i+1;
			}
			j++;
		}
	}
	
	if(anslen==0){
		printf("1\n%lld",n);
	}else{
		printf("%lld\n",anslen);
		for(ll i=0;i<anslen;i++){
			printf("%lld",ansi+i);
			if(i<anslen-1){
				printf("*");
			}
		}
	}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/aixiaoxiao13/article/details/121106692