算法题:x^2=aabb.求x.

somebody 2010-11-25 12:23:47
一个整数的平方等于一个四位整数,且这个四位整数的千位和百位相等,个位和十位相等!求这个整数!
即x^2=aabb.求x.

要求:
1.不能用完全枚举法!
2.算法尽量简单
3.代码实现,理论论证均可!
...全文
364 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengyouya123 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mathe 的回复:]

可以如下分析
由于11|aabb,所以这个平方数必然是11^2=121的倍数,或者说a0b=aabb/11是11的倍数
也就是11|a+b,即a+b=11
此外,由于aabb是平方数,所以b=0,1,4(mod 5)
由此得出b=0,1,4,5,6,9,再有11*b=0,1(mod 4),即b=0,3(mod 4),推导出b=0,4
在根据a+b=11,只能a=7,b=4
然后计算7……
[/Quote]
九楼的数学功底很好,自愧不如。没想到可以这么做。
sxq310 2010-11-27
  • 打赏
  • 举报
回复
学习3楼的剪枝算法
niesen111 2010-11-27
  • 打赏
  • 举报
回复
引用 9 楼 mathe 的回复:

可以如下分析
由于11|aabb,所以这个平方数必然是11^2=121的倍数,或者说a0b=aabb/11是11的倍数
也就是11|a+b,即a+b=11
此外,由于aabb是平方数,所以b=0,1,4(mod 5)
由此得出b=0,1,4,5,6,9,再有11*b=0,1(mod 4),即b=0,3(mod 4),推导出b=0,4
在根据a+b=11,只能a=7,b=4
然后计算7……


九楼的数学功底很好,自愧不如。没想到可以这么做。
csdnflys 2010-11-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhaolinger2 的回复:]
引用 2 楼 xiongchenghui 的回复:
"再剪,得是11的倍数吧,总共才7个数.33,44,55~99"?????

你咋个减枝的?


这还不简单:

根据“奇数位之和和偶数位之和的差是0或者11的倍数的数能被11整除”,aabb一定能被11整除。
又因为11是质数,所以x也一定要是11的倍数,其平方数才有可能含有11的因子。

证毕。
[/Quote]
怎么会出现差是11呢??
碧水幽幽泉 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhaolinger2 的回复:]
引用 2 楼 xiongchenghui 的回复:
"再剪,得是11的倍数吧,总共才7个数.33,44,55~99"?????

你咋个减枝的?


这还不简单:

根据“奇数位之和和偶数位之和的差是0或者11的倍数的数能被11整除”,aabb一定能被11整除。
又因为11是质数,所以x也一定要是11的倍数,其平方数才有可能含有11的因子。

证毕。
[/Quote]
No_Data_Found 2010-11-26
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sbwwkmyd 的回复:]

1100a+11b
=>11*((9*11)a+a+b)
=>a+b=11
=>9a=x^2-1
=>9a=(x+1)(x-1)
=>a=7
=>b=4
[/Quote]
figo1688 2010-11-26
  • 打赏
  • 举报
回复
学习了,好题。
第一次听到这个结论“奇数位之和和偶数位之和的差是0或者11的倍数的数能被11整除”
somebody 2010-11-25
  • 打赏
  • 举报
回复
"再剪,得是11的倍数吧,总共才7个数.33,44,55~99"?????

你咋个减枝的?
lzc52151 2010-11-25
  • 打赏
  • 举报
回复
呵呵,为什么不枚举,总共不到一百个数.
-------------
剪剪枝,32~99才能保证平方四位数
再剪,得是11的倍数吧,总共才7个数.33,44,55~99
这程度总可以枚举了吧?

当然这题最简单的代码是printf("88");
showjim 2010-11-25
  • 打赏
  • 举报
回复
1100a+11b
=>11*((9*11)a+a+b)
=>a+b=11
=>9a=x^2-1
=>9a=(x+1)(x-1)
=>a=7
=>b=4
mathe 2010-11-25
  • 打赏
  • 举报
回复
可以如下分析
由于11|aabb,所以这个平方数必然是11^2=121的倍数,或者说a0b=aabb/11是11的倍数
也就是11|a+b,即a+b=11
此外,由于aabb是平方数,所以b=0,1,4(mod 5)
由此得出b=0,1,4,5,6,9,再有11*b=0,1(mod 4),即b=0,3(mod 4),推导出b=0,4
在根据a+b=11,只能a=7,b=4
然后计算7744=11*11*64=88^2
njwangchuan 2010-11-25
  • 打赏
  • 举报
回复
直接定位还是有点困难,现在可以定位在:33-99之间,及aabb=121*(k^2),k=3..9

这样n=aabb的素因子,除了11外,可以固定在2,3,5,7,9之间

1.可以排除5,若25是n的因子,n的后2位只能是00,25,50,75中一种
2.不能被5整除的完全平方数,只能是5k±1型.
3.由于n后两位相同,排除奇数(奇数平方个位为1,5,9,十位为偶数)
4.排除b=6.性质如果完全平方数的十位数字是奇数,则它的个位数字一定是6;反之,如果完全平方数的个位数字是6,则它的十位数字一定是奇数。综合3,b=4

5.因为22不在33-99这个区间,故答案为88,证毕
0轰隆隆0 2010-11-25
  • 打赏
  • 举报
回复
一个整数的平方等于一个4位数,那我们就可以得出:
这个数取值的范围在32-100之间

然后要取得这个4位数每位数上的数字:
取千位:x/1000
取百位:x%1000/100
取十位:x%100/10
取个位:x%10

这样的话就很容易取到值:


for(int i=32;i<100;i++){

int temp = i*i;

if(temp/1000==temp%1000/100 && temp%100/10==temp%10){
System.out.println(i+"^2="+i*i);
}

}
angel6709 2010-11-25
  • 打赏
  • 举报
回复
我靠^是平方呀
angel6709 2010-11-25
  • 打赏
  • 举报
回复
A^B=!A&B|A&!B
所以
x^2
=x&(1111 1111 1111 1101)|!x&(0000 0000 0000 0010)
=1010 1010 1011 1011
所以x=1010 1010 1011 10_1
!x=0101 0101 0100 011_
所以x=1010 1010 1011 1001
somebody 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zhaolinger2 的回复:]
引用 2 楼 xiongchenghui 的回复:
"再剪,得是11的倍数吧,总共才7个数.33,44,55~99"?????

你咋个减枝的?


这还不简单:

根据“奇数位之和和偶数位之和的差是0或者11的倍数的数能被11整除”,aabb一定能被11整除。
又因为11是质数,所以x也一定要是11的倍数,其平方数才有可能含有11的因子。

证毕。
[/Quote]
理解了,强悍!
我在想可不可以再精确点,直接定位到结果是哪个数???
zhaolinger2 2010-11-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xiongchenghui 的回复:]
"再剪,得是11的倍数吧,总共才7个数.33,44,55~99"?????

你咋个减枝的?
[/Quote]

这还不简单:

根据“奇数位之和和偶数位之和的差是0或者11的倍数的数能被11整除”,aabb一定能被11整除。
又因为11是质数,所以x也一定要是11的倍数,其平方数才有可能含有11的因子。

证毕。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧