Jump to content

Composite numbers k with no single digit factors whose factors are all substrings of k: Difference between revisions

→‎{{header|PARI/GP}}: beautify the PARI/GP code
(Add PARI/GP implementation)
(→‎{{header|PARI/GP}}: beautify the PARI/GP code)
Line 694:
=={{header|PARI/GP}}==
<syntaxhighlight lang="PARI/GP">
/* Returns a substring of str starting at s with length n */
ssubstr(str, s = 1, n = 0) = {
my(vt = Vecsmall(str), ve, vr, vtn = #str, n1);
if(vtn==0,return(""));
if (s<1||s>vtn == 0, return(str""));
if (s < 1 || s > vtn==0, return(""str));
n1 = vtn - s + 1; if (n == 0, n = n1); if (n > n1, n = n1);
ve = vector(n, z, z - 1 + s); vr = vecextract(vt, ve); return(Strchr(vr));
}
 
/* Checks if subStr is a substring of mainStr */
 
isSubstring(mainStr, subStr) = {
mainLen = #Vecsmall(mainStr);
subLen = #Vecsmall(subStr);
for (startPos = 1, mainLen - subLen + 1,
if (ssubstr(mainStr, startPos, subLen) == subStr,
return return(1); /* True,: subStr found thein substringmainStr */
)
);
return return(0); /* False,: substringsubStr not found */
}
 
\\/* Determines if a number's factors, all > 9, are substrings of its decimal representation */
 
\\ Determines if a number's factors, all > 9, are substrings of its decimal representation
contains_its_prime_factors_all_over_9(n) = {
if (n < 10 || isprime(n), return(0)); \\/* Early returnSkip if n < 10 or n is prime */
strn = Str(n); \\/* Convert n to its string representation*/
pfacs = factor(n)[, 1]; \\/* Get the unique prime factors of n */
\\printfor ("ni =" n "1,pfacs=" #pfacs);,
if (pfacs[i] <= 9, return(0)); /* Skip factors ≤ 9 */
for(i=1, #pfacs,
if (!isSubstring(strn, Str(pfacs[i] <= 9)), return(0)); \\/* Check Skipif factorsfactor notis greatera thansubstring 9*/
if(!isSubstring(strn, Str(pfacs[i])), return(0)); \\ Check if factor is not a substring
);
return(1); \\/* All conditionschecks metpassed */
}
 
\\/* Main loop to find and print numbers meeting the criteria */
{
found = 0; \\/* InitializeCounter counterfor numbers found */
for (n = 0, 30 * 10^6, \\/* Iterate from 0 to 30 million */
if (contains_its_prime_factors_all_over_9(n),
found += 1; \\/* Increment counter if n meets the criteria */
print1(n, " "); \\/* Print n followed by a space */
if (found % 10 == 0, print("")); \\/* Print a newlineNewline every 10 numbers */
if (found == 20, break); \\/* Stop after finding 20 numbers */
);
);
338

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.