[ create a new paste ] login | about

Link: http://codepad.org/fzStjjF6    [ raw code | output | fork ]

C, pasted on Dec 3:
#include <stdio.h>
 
int is_prime(unsigned x)
  {
  unsigned q;
 
  if(!(x&1))
    return x==2;
 
  if(x==1)
    return 0;
 
  for(q=3; q*q<=x; q+=2)
    if(!(x%q))
      return 0;
 
  return 1;
  }
 
unsigned is_multiprime(unsigned x)
  {
  unsigned q;
 
  if(!is_prime(x))
    return x==1;
 
  if(x<10)
    return 1;
 
  for(q=10; q<x; q*=10)
    if(is_multiprime(x/q) && is_multiprime(x%q))
      return q;
 
  return 0;
  }
 
int digits(unsigned x)
  {
  unsigned res;
 
  for(res=0; x; ++res)
    x/=10;
  
  return res;
  }
 
int main(void)
  {
  unsigned q, base;
 
  q=22307; //for(q=0; q<10000; ++q)
    if(base=is_multiprime(q) /*assignment*/)
      printf("%d as %d %.*d\n", q, q/base, digits(base-1), q%base);
 
  puts("Done.");
  getchar();
  return 0;
  }


Output:
1
2
22307 as 223 07
Done.


Create a new paste based on this one


Comments: