
Concept:
1 Generate sieve upto 60000
2 Then while the number stays the division is done from the primes[] array.
EDIT:Sorry, I had left some RUNTIME CHECK statement in. Got AC. You guys are doing a great job.
Code: Select all
Got AC. Lovin' it.
Moderator: Board moderators
Code: Select all
Got AC. Lovin' it.
Code: Select all
#include<stdio.h>
#include<bitset>
#include<vector>
#include<map>
#define L1 1000009
#define L2 1009
using namespace std;
vector<long long int>primos;
map<long long int,long long int>factores;
bitset<L1>criba;
void generate()
{
criba.set(); criba.reset(0); criba.reset(1);
for(int i=2;i<L2;i++){
if(criba.test(i)){
primos.push_back(i);
for(int j=i+i;j<L1;j+=i){ if(criba.test(j)){criba.reset(j);}}
}
}
}
void factoriza(long long int n)
{
int i=0; factores.clear();
while(i<primos.size() && primos[i]*primos[i]<=n){
if(n%primos[i]==0){
factores[primos[i]]++; n=n/primos[i];
}
else i++;
}
if(n>1) factores[n]++;
}
int main()
{ generate();
long long int n; map<long long int,long long int>::iterator it;
int flag=0;
while(scanf("%lld",&n)==1 && n!=0){
if(flag>0){ puts("");}
flag++; printf("%lld =",n);
int flag=1; if(n<0){flag=0; n=(-1)*n; }
factoriza(n); int many;
it=factores.begin();
if(flag==0){printf(" -1");}
else{printf(" ");
printf("%lld",it->first);
many=it->second;
while(many>1){many--; printf(" x %lld",it->first); } it++;
}
for(;it!=factores.end();it++){
many=it->second;
while(many>0){many--; printf(" x %lld",it->first); }
}
}
return 0;
}
Code: Select all
#include<stdio.h>
int main()
{
long long int num; long long int i,var;
while(scanf("%lld",&num)==1 && num!=0){ int bandera=1;
printf("%lld =",num); var=num;
if(num<0){
printf(" -1"); num=(-1)*num;
for(long long int i=2;i*i<=num;i++){
while(num%i==0){bandera=0; printf(" x %lld",i); num=num/i; }
if(bandera){bandera=0;}
}}
else{
for(i=2;i*i<=num;i++){
if(num%i==0){bandera=0; printf(" %lld",i); num=num/i; break; }
}
for(;i*i<=num;i++){
while(num%i==0){
if(bandera==1){ printf(" %lld",i); bandera=0;}
else
printf(" x %lld",i);
num=num/i;
}
}
}
if(num>1){if(bandera==0)
printf(" x %lld",num); else printf(" %lld",num);
}
puts("");
}
return 0;
}
Code: Select all
#include<stdio.h>
#define MAX 47000
int primes[MAX],tot=0;
void sieve()
{
long int i,j;
for(i=3; i*i<MAX; i+=2)
{
if(primes[i]==0)
{
for(j=i*i; j<=MAX; j+=2*i)
primes[j]=1;
}
}
primes[tot++]=2;
for(i=3; i<=MAX; i+=2)
{
if(primes[i]==0)
primes[tot++]=i;
}
}
int main(){
sieve();
long n,p,r;
int i,k;
while(scanf("%ld",&n)){
k=0;
if(n==0)
break;
else{
printf("%ld =",n);
if(n<0){
printf(" -1");
k=1;
n*=-1;
}
p=n;
for(i=0;primes[i]*primes[i]<=p;i++){
r=primes[i];
while(n%r==0){
if(k)
printf(" x");
printf(" ");
printf("%d",r);
n/=r;
k=1;
}
}
if(n!=1){
if(k)
printf(" x");
printf(" ");
printf("%ld",n);
}
}
printf("\n");
}
return 0;
}
You must check that scanf returns 1 here.while(scanf("%ld",&n)){
Code: Select all
#include<iostream>
#include<cmath>
using namespace std;
#define n 100000
int a[n];
int pr[50000];
int main()
{
int i,j;
for(i=0;i<n;i++)
a[i]=0;
a[1]=1;
for(i=2;i<n;i++)
{
if(!a[i])
{
for(j=2;i*j<n;j++)
{
a[i*j]=1;
}
}
}
j=0;int count=0;
for(i=1;i<n;i++)
{
if(a[i]==0)
{
pr[j]=i;
j++;
count++;
}
}
long long int num,temp;
int first=0;
while(scanf("%lld",&num)==1 && num)
{
printf("%lld = ",num);
if(num<0)
{
temp=(-1)*num;
cout<<"-1";
first=1;
}
else
temp=num;
for(i=0;pr[i]<=sqrt(temp) && temp!=1;i++)
{
while(temp%pr[i]==0)
{
if(!first)
{
first=1;
}
else
cout<<" x ";
cout<<pr[i];
temp=temp/pr[i];
}
}
if(temp!=1)
{
if(!first)
{
first=1;
}
else
cout<<" x ";
printf("%lld",temp);
}
cout<<endl;
first=0;
}
if(!num)
cout<<endl;
return 0;
}
Code: Select all
Accepted!
Code: Select all
#include<stdio.h>
#include<math.h>
int isPrime(long n)
{
long i,len=sqrt(n);
for(i=2;i<=len;i++)
{
if(n%i==0)
return 0;
}
return 1;
}
void recurtion(long n)
{
if(n<2) return 0;
long i,len;
for(i=2;;i++)
{
if(n%i==0)
{
if(isPrime(i)==1)
{
printf(" x");
printf(" %ld",i);
recurtion(n/i);
break;
}
}
}
}
void main()
{
long i,n,len;
while(scanf("%ld",&n)==1)
{
if(n==0) break;
if(n==1) printf("1 = 1\n");
else if(n==-1) printf("1 = -1 x 1\n");
else {
if(n<0) {printf("%ld = -1 x",n);n*=-1;}
else printf("%ld =",n);
for(i=2;;i++)
{
if(n%i==0 && isPrime(i)==1)
{
len=n/i;
printf(" %ld",i);
break;
}
}
recurtion(len);
printf("\n");
}
}
}
Code: Select all
enjoying life .....