找回密码
 欢迎注册
查看: 236|回复: 4

[求助] 寻找平方数的代码

[复制链接]
发表于 2025-3-9 16:48:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
想用maple软件尝试寻找下面数列中哪个数是平方数或者是立方数。初步尝试到1000位数左右停止搜索。在下面这三个数列中寻找
1:自然数系列,1,12,123,1234,12345...
2:奇数系列:1,13,135,1357,13579,1357911...
3:偶数系列:2,24,246,2468,246810...

1.论坛里的高手们,请人工分析一下可能性,概率有多大,再去讨论代码,如果没有,就不必去写代码了。
2.AI写的代码效率太低,20分钟没有出结果,我关闭了软件。

# 生成自然数系列的第n项
naturalSeries := proc(n)
    local i, result;
    result := "";
    for i from 1 to n do
        result := cat(result, i);
    end do;
    return parse(result);
end proc:

# 生成奇数系列的第n项
oddSeries := proc(n)
    local i, result;
    result := "";
    for i from 1 to n do
        result := cat(result, 2*i-1);
    end do;
    return parse(result);
end proc:

# 生成偶数系列的第n项
evenSeries := proc(n)
    local i, result;
    result := "";
    for i from 1 to n do
        result := cat(result, 2*i);
    end do;
    return parse(result);
end proc:

# 判断一个数是否为平方数或立方数
isSquareOrCube := proc(num)
    local sqrtNum, cbrtNum;
    if num < 0 then
        return "非平方数和立方数";
    end if;
    sqrtNum := sqrt(num);
    cbrtNum := num^(1/3);
    if evalf(sqrtNum)^2 = num then
        return "平方数";
    elif evalf(cbrtNum)^3 = num then
        return "立方数";
    else
        return "非平方数和立方数";
    end if;
end proc:

# 搜索自然数系列中的平方数和立方数
searchNaturalSeries := proc(maxLength)
    local n, num, result;
    for n from 1 to maxLength do
        num := naturalSeries(n);
        result := isSquareOrCube(num);
        if result <> "非平方数和立方数" then
            print(cat("自然数系列第", n, "项:", num, " 是", result));
        end if;
    end do;
end proc:

# 搜索奇数系列中的平方数和立方数
searchOddSeries := proc(maxLength)
    local n, num, result;
    for n from 1 to maxLength do
        num := oddSeries(n);
        result := isSquareOrCube(num);
        if result <> "非平方数和立方数" then
            print(cat("奇数系列第", n, "项:", num, " 是", result));
        end if;
    end do;
end proc:

# 搜索偶数系列中的平方数和立方数
searchEvenSeries := proc(maxLength)
    local n, num, result;
    for n from 1 to maxLength do
        num := evenSeries(n);
        result := isSquareOrCube(num);
        if result <> "非平方数和立方数" then
            print(cat("偶数系列第", n, "项:", num, " 是", result));
        end if;
    end do;
end proc:

# 执行搜索
searchNaturalSeries(1000);
searchOddSeries(1000);
searchEvenSeries(1000);
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-3-9 18:07:33 | 显示全部楼层
后四位:{2324, 3536, 4041, 4849, 5556, 8081, 8384, 8889}

后四位:{1921, 2224, 2729, 4244, 5456, 5961, 6769, 7476}

后六位:{103104,120121,128129,160161,168169,183184,200201,203204,208209,224225,235236,240241,248249,280281,288289,295296,320321,328329,360361,363364,368369,375376,395396,400401,408409,423424,440441,448449,480481,488489,503504,520521,523524,528529,555556,560561,568569,600601,608609,615616,640641,648649,680681,683684,688689,695696,715716,720721,728729,743744,760761,768769,800801,808809,823824,840841,843844,848849,875876,880881,888889,920921,928929,935936,960961,968969}

后六位:{103104,120121,128129,160161,168169,183184,200201,203204,208209,224225,235236,240241,248249,280281,288289,295296,320321,328329,360361,363364,368369,375376,395396,400401,408409,423424,440441,448449,480481,488489,503504,520521,523524,528529,555556,560561,568569,600601,608609,615616,640641,648649,680681,683684,688689,695696,715716,720721,728729,743744,760761,768769,800801,808809,823824,840841,843844,848849,875876,880881,888889,920921,928929,935936,960961,968969}
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2025-3-9 18:08:11 | 显示全部楼层
直觉只有1满足条件
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-3-10 07:40:14 | 显示全部楼层
northwolves 发表于 2025-3-9 18:08
直觉只有1满足条件

你的末尾数法简单直观,我能看懂。只需验证很少的几个数据即可,不上100个。六位尾数重复了,还是只有这一种?立方数的尾数还没有。

AI的这种分析可能不严谨,有什么问题吗?
AI的理论分析:
数列1:自然数连接(1, 12, 123, 1234, 12345, ...)
构造方式:将自然数1到n依次连接。

关键分析:

末位数字:当n≥2时,末位为2,3,4,...,9,0,循环出现。平方数的末位只能是0,1,4,5,6,9,立方数末位可为0,1,4,5,6,7,8,9。

模9分析:数的数字和为1+2+…+n = n(n+1)/2。平方数模9余0,1,4,7,立方数模9余0,1,8。例如:

n=2时,数字和3 → 模9余3,既非平方也非立方余数。

n=4时,数字和10 → 模9余1,可能为平方或立方数,但1234本身不符。

数值检查:前几项(如12, 123, 1234)均非平方或立方数,且随着n增大,数值增长速度远超平方/立方数。

结论:除1外,无其他平方数或立方数。

数列2:奇数连接(1, 13, 135, 1357, 13579, ...)
构造方式:将前n个奇数依次连接。

关键分析:

数字和:前n个奇数之和为n²,故数本身模9余n² mod9(可能余0,1,4,7)。

末位分析:末位为1,3,5,7,9。平方数末位若为奇数,只能是1,5,9;立方数末位可为1,3,5,7,9。

数值检查:

13(n=2):非平方/立方。

135(n=3):平方根≈11.6,立方根≈5.1,均非整数。

更大项因数值庞大,无法成为平方/立方数。

结论:除1外,无其他平方数或立方数。

数列3:偶数连接(2, 24, 246, 2468, 246810, ...)
构造方式:将前n个偶数依次连接。

关键分析:

末位与4的倍数:偶数平方数必须为4的倍数。检查发现:

n=2时,24是4的倍数,但24非平方数。

n=3时,246末位6,但246/4=61.5,余2,非4倍数。

n=4时,2468末位8,2468/4=617,但平方根≈49.68,非整数。

模9分析:数字和为n(n+1),模9余数不符合平方/立方要求。

结论:无平方数;立方数同样不存在。

最终结论:
三个数列中,除了数列1的首项1(既是1²也是1³)外,均不存在其他平方数或立方数。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2025-3-10 07:46:24 | 显示全部楼层
数论爱好者 发表于 2025-3-10 07:40
你的末尾数法简单直观,我能看懂。只需验证很少的几个数据即可,不上100个。六位尾数重复了,还是只有这 ...

如果从尾数研究着手,逐步向前推进,只是种类太多无法处理。

以下是一些别人的规律,是否完全正确,未逐条验证。
如果一个正整数a是某一个整数b的平方,那么这个正整数a叫做完全平方数。零也可称为完全平方数。其性质如下:

(1)平方数的个位数字只能是0,1,4,5,6,9。

(2)任何偶数的平方一定能被4整除;任何奇数的平方被4(或8)除余1,即被4除余2或3的数一定不是完全平方数。

(3)完全平方数的个位数字是奇数时,其十位上的数字必为偶数。完全平方数的个位数字是6时,其十位数字必为奇数。

(4)凡个位数字是5但末两位数字不是25的自然数不是完全平方数;末尾只有奇数个0的自然数不是完全平方数;个位数字是1,4,9而十位数字为奇数的自然数不是完全平方数。

(5)除1外,一个完全平方数分解质因数后,各个质因数的指数都是偶数,如果一个数质分解后,各个指数都为偶数,那么它肯定是个平方数。完全平方数的所有因数的总个数是奇数个。因数个数为奇数的自然数一定是完全平方数。

(6)如果a、b是平方数,a=bc,那么c也是完全平方数。

(7)两个连续自然数的乘积一定不是平方数,两个连续自然数的平方数之间不再有平方数。

(8)偶数的平方是4的倍数;奇数的平方是4的倍数加1。

(9)奇数的平方是8n+1型;偶数的平方为8n或8n+4型。

(10)形式必为下列两种之一:3k,3k+1。

(11)不是5的因数或倍数的数的平方为5k+-1型,是5的因数或倍数的数为5k型。

(12)在两个相邻的整数的平方数之间的所有整数都不是完全平方数。

(13)一个正整数n是完全平方数的充分必要条件是n有奇数个因数(包括1和n本身)。
(14)连续整数平方数间隔:在两个连续正整数的平方数之间不存在完全平方数。
(15)约数个数奇偶性:完全平方数的约数个数是奇数,约数个数为奇数的自然数也是完全平方数。
末位数字规律:完全平方数的个位是6时,其十位是奇数;个位是0时,后面连续的0的个数一定是偶数;个位是5时,其十位一定是2,且其百位一定是0, 2, 6中的一个。
完全平方数的综合运用:自然数的平方末两位只有特定的几种组合,如00, 01, 21, 41, 61, 81, 04, 24, 44, 64, 84, 25, 09, 29, 49, 69, 89, 16, 36, 56, 76, 96。
个位数字奇偶性:完全平方数个位数字是奇数(1, 5, 9)时,其十位上的数字必为偶数;个位数字是偶数(0, 4)时,其十位上的数字必为偶数;个位数字为6时,其十位数字必为奇数。
非完全平方数的特征:凡个位数字是5但末两位数字不是25的自然数不是完全平方数;末尾只有奇数个“0”的自然数不是完全平方数;个位数字为1, 4, 9而十位数字为奇数的自然数不是完全平方数。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2025-4-3 07:14 , Processed in 0.024681 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表