| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1665 人关注过本帖
标题:模运算怎么算
只看楼主 加入收藏
lin389064181
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-11-28
收藏
得分:0 
回复 9楼 azzbcc
貌似要用到 快速幂 吧
2012-12-01 23:18
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
==我想想


[fly]存在即是合理[/fly]
2012-12-01 23:29
lin389064181
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-11-28
收藏
得分:0 
回复 12楼 azzbcc
就这性质
(a + b) % m = (a % m + b % m) % m;
(a * b) % m = ((a % m) * (b % m)) % m;
2012-12-01 23:36
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <math.h>
#define N 100000007
int main()
{
    long M;
    __int64 s;
    __int64 temp = (__int64)pow(2, 62) % N;

    while ((scanf("%ld", &M)) != EOF)
    {
        s = 1;
        while(M > 62)
        {
            M -= 62;
            s *= temp;
            if (s > N)
                s %= N;
        }
        s = s * (__int64)pow(2, M) % N;
        printf("%I64d\n", s);
    }
    return 0;
}


[fly]存在即是合理[/fly]
2012-12-01 23:50
lin389064181
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-11-28
收藏
得分:0 
回复 14楼 azzbcc
唉。。上交还是现实WRONG ANSWERS
2012-12-02 00:18
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 

找了半天抽屉数,大于200,000了,这道题要我命啊!!!

咳咳,会不会不识别__int64。唉,算了,当我没说过。。。


[fly]存在即是合理[/fly]
2012-12-02 01:01
lin389064181
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-11-28
收藏
得分:0 
回复 16楼 azzbcc
呵。。。也要了我的命啊。。。不过已经很感谢你了
2012-12-02 08:04
lin389064181
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2012-11-28
收藏
得分:0 
回复 14楼 azzbcc
不用VC交就过了
2012-12-02 14:13
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
程序代码:
#include <stdio.h>
#include <math.h>

#define  Mount     10
#define  Pow_Size  50
#define  N  100000007

int main()
{
    long M, n;
    __int64 s;
    __int64 temp[Mount + 1];

    temp[0] = (__int64)pow(2, Pow_Size) % N;
    for (int i = 1;i <= Mount;i++)
        temp[i] = temp[i - 1] * temp[i - 1] % N;
    //temp[]初始化,将 pow(2,(pow(2, i) * Pow_Size)) % N 存入temp[i]

    while ((scanf("%ld", &M)) != EOF)
    {
        s = 1;    i = Mount;
        n = (long)pow(2, Mount) * Pow_Size;
        while(M > 50)
        {
            if (M < n)
            {
                i--;    n /= 2;
            }
            else
            {
                M -= n;
                s = s * temp[i] % N;
            }
        }
        s = (__int64)pow(2, M) % N * s % N;
        printf("%I64d\n", s);
    }
    return 0;
}


[ 本帖最后由 azzbcc 于 2012-12-2 19:00 编辑 ]


[fly]存在即是合理[/fly]
2012-12-02 18:53
azzbcc
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:江西财经大学
等 级:贵宾
威 望:81
帖 子:3293
专家分:12919
注 册:2012-11-4
收藏
得分:0 
14楼
s = s * (__int64)pow(2, M) % N;
有错
应该是
s = (__int64)pow(2, M) % N * s % N;


[fly]存在即是合理[/fly]
2012-12-02 18:55
快速回复:模运算怎么算
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033856 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved