24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1042  |  回复: 12
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

freedomice

金虫 (正式写手)

[求助] 求组一个c程序问题

题目:由n个1组成的整数能被2011整除,求n至少为多大?
代码如下。经调试当运行到9个1的时候,数据变成负的,疑为溢出,但不知道到底是哪里出问题了?
#include
#define N 2011
void main()
{
        long a=1,n=0;

        while(a%N)
        {
                a=10*a+1;
                n++;
        }
        printf("%ld",a);

}
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


xzhdty: 金币+1, 谢谢参与 2012-04-20 23:15:14
这个问题可以数学味一点

同余方程式
CODE:
  a ≡ a (mod n)
=> a ≡ a mod n (mod n)
=> 10a ≡ 10(a mod n) (mod n)
=> 10a+1 ≡ 10(a mod n)+1 (mod n)

那么程序就是这样了
CODE:
#include

int main() {
        int a = 1, n = 1;
       
        while(a %= 2011){
                a = 10*a + 1;
                n++;
        }
       
        printf("n=%d\n", n);
        return 0;
}

8楼2012-04-20 22:22:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

算得n=670,有点出乎意料
9楼2012-04-20 22:24:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

引用回帖:
10楼: Originally posted by lurencyj at 2012-04-20 22:32:07:
不明白了。。。。
求讲解。。。。。

a ≡ b (mod n)
意思是a模n的值等于b模n的值

a ≡ a (mod n)
这个理所当然啦

a ≡ a mod n (mod n)
这个,因为a模n的值小于n,所以计算“a模n,再继续模n”的话,结果是不变的,还是等同于a模n

接下来呢。。。证明一下,如果a ≡ b (mod n)那么ac ≡ bc (mod n)
CODE:
假设一个余数叫r,那么因为a ≡ b (mod n),我们可以将a和b写成
a = k1 * n + r
b = k2 * n + r  【注意这里的r 然后就有
ac = c * k1 * n + r * c
bc = c * k2 * n + r * c
于是得到:
ac 模 n = r * c 模 n
bc 模 n = r * c 模 n
即为
ac ≡ bc (mod n)

最后一个,就是证明:如果a ≡ b (mod n)那么a+c ≡ b+c (mod n)
这个和上面的方法差不多,就省略了

最后得到的关系式:10a+1 ≡ 10(a mod n)+1 (mod n)
这意味着什么呢?我不断地迭代a的值到10a+1,每次作求模测试,其实我只需要迭代a%n就行了,这样也保证不会溢出

于是就得到了上面所述的程序
11楼2012-04-20 23:31:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)

以上用到的符号皆为非负整数。。。补充说明。。。
12楼2012-04-20 23:32:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 freedomice 的主题更新
信息提示
请填处理意见