Composite numbers k with no single digit factors whose factors are all substrings of k: Difference between revisions
Composite numbers k with no single digit factors whose factors are all substrings of k (view source)
Revision as of 11:17, 8 February 2024
, 3 months ago→{{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 (
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,
)
);
}
▲\\ 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));
strn = Str(n);
pfacs = factor(n)[, 1];
if (pfacs[i] <= 9, return(0)); /* Skip factors ≤ 9 */
if (!isSubstring(strn, Str(pfacs[i]
);
return(1);
}
{
found = 0;
for (n = 0, 30 * 10^6,
if (contains_its_prime_factors_all_over_9(n),
found += 1;
print1(n, " ");
if (found % 10 == 0, print(""));
if (found == 20, break);
);
);
|