Cod sursa(job #211718)

Utilizator toni2007Pripoae Teodor Anton toni2007 Data 3 octombrie 2008 14:07:42
Problema Frac Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <stdio.h>
#include <stdlib.h>
#define N 1<<17
long long int n,k;
void scan(void){
	char buffer[32];
	int aux=0,poz=0,i;
	long long int tmp[4];
	//freopen("frac.in","r",stdin);
	//freopen("frac.out","w",stdout);
	gets(buffer);
	for (i=0;buffer[i];++i)
		if (buffer[i]==' '){
			tmp[++poz]=aux;
			aux=0;
		}
		else{
			aux=aux*10+buffer[i]-'0';
		}
	tmp[++poz]=aux;
	n=tmp[1];k=tmp[2];
}	
int stack[N],check[N];
inline void check_it(int i){
	check[i]=1;
}
inline void push_in_stack(int i){
	stack[++stack[0]]=i;
}
int st[N];
inline void push_again(int i){
	st[++st[0]]=i;
}
void search_for_primes(void){
	int i;
	long long j,cln=n;
	push_in_stack(2);
	for (i=4;(long long)i*(long long)i<=n;i+=2)
		check_it(i);
	for (i=3;(long long)i*(long long)i<=n;i+=2)
		if (!check[i]){
			push_in_stack(i);
			for (j=(long long)i*(long long)i;j*j<(long long)N;j+=i)
				check_it((int )j);
		}
	for (i=1;i<=stack[0] && cln>1;++i){
		if (cln%stack[i]==0){
			push_again(stack[i]);
		}
		while (cln%stack[i]==0)
			cln/=stack[i];
	}
	for (i=1;i<=st[0];++i)
		fprintf(stderr,"%d ",st[i]);
}
void solve(void){
	int i;
	search_for_primes();
}
void print(void){
}
int main(void){
	scan();
	solve();
	print();
}