View Single Post 2013-07-23, 20:50   #7
science_man_88

"Forget I exist"
Jul 2009
Dumbassville

26×131 Posts Quote:
 Originally Posted by mart_r Okay, there are one or two things that I didn't think of off the top of my head. Thanks. This is a broader approach to the problem than I had in mind, I was more concerned about finding one (preferably the smallest) solution to a rather large (>10^12) given number. Anyway the program I compiled during the weekend seems to work quite nicely already, though it still won't find a good solution for, say, n=Xpqr for large primes p,q,r and X a small prime or a product of small primes. This is how far I've gotten on my own: Code: ai(n,u)=if(n<3||u<-1,break());t=0;if(u==0,t=1);if(u>0,t=u);r=0;if(t==1,q=2;while(!ispseudoprime(n-q-1),q=nextprime(q+1);if(q>n,break()));r=q*(n-q-1),if(u==-1,t=n%2);while(r<=0&&u!=0&&t0,x=#v)));if(u>0,u=0)));if(u==-1&&r==0&&isprime(n-1),r=(n-1)*(n-1));if(r>0,print("solution: "r);print(factor(r)),print("no solution u*p*q for u="t)) \\ finds N such that sigma(N)-N=n via N=pq if n-q-1 is prime, optional u for additional factors N=upq; for u=-1, searches through u=2...inf until a solution is found (Will modify it a little more later, for example trying a number of "special" small factors first.)
I should be thanking you, it was trying to come up with a "better" ali after looking and responding to this thread that I realized a property of partitions() I hadn't before allowing a partial solution up to a given number ( like vecmax would) and it allowed me to practice with select() as well.

here's what I came up with:

Code:
ali2000(y)=
a=select(v->isprime(v)==1 &&
#vecsort(v,,8)==#v &&
#setminus(Vec(divisors(v[#v])),Vec(v))==1,
partitions(y-1));
for(x=1,#a,
if(sigma(a[x]*a[x][#a[x]])-(a[x]*a[x][#a[x]])==y,
a[x]=a[x]*a[x][#a[x]],
a[x]=0)
);
a=vecsort(a,,8);
a=vector(#a-1,n,a[n+1])

Last fiddled with by science_man_88 on 2013-07-23 at 20:54  