NYOJ-102-次方求模

原创 2013年12月05日 14:53:18

次方求模

时间限制:1000 ms  |  内存限制:65535 KB
难度:3
描述

求a的b次方对c取余的值

 

输入
第一行输入一个整数n表示测试数据的组数(n<100)
每组测试只有一行,其中有三个正整数a,b,c(1=<a,b,c<=1000000000)
输出
输出a的b次方对c取余之后的结果
样例输入
3
2 3 5
3 100 10
11 12345 12345
样例输出
3
1
10481

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=102




参考:

Long Long、__int64使用总结

前言:
  在16位环境下,int/unsigned int 占16位,long/unsigned long占32位
  在32位环境下,int占32位,unsigned int占16位,long/unsigned long占32位
何时需要使用:
  long 和 int 范围是[-2^31,2^31),即-2147483648~2147483647,而unsigned范围是[0,2^32),即0~4294967295,所以常规的32位整数只能够处理40亿左右,当遇到比40亿大的多的数就要用到64位。
64位使用范围:
  不同的编译器对64位整数的扩展有所不同,VC使用__int64/unsigned __int64,范围是[-2^63, 2^63)和[0,2^64),即-9223372036854775808~9223372036854775807与 0~18446744073709551615(约1800亿亿)。
注意点:
1、编译器不同导致使用64位的申明方式不同;
2、long long / unsigned long long 一般是Linux下申明方式、如:G++
3、__int64 /unsigned __int64一般是Windows下使用64位的申明方式,如:VS
4、在赋值时需要注意加上ll进行显式赋值;
5、当进行64位与 32位的混合运算时,32位整数会被隐式转换成64位整数。
6、输出printf("");,long long使用%lld输出,__int64使用%I64d,无符号使用u替代d即可。
7、测试下来编译器一般都支持2种操作,不必太过纠结,怎么使用看个人喜欢。

//=================================华丽的分隔线========================================
#include <stdio.h>
#include <stdlib.h>
intmain(){
    unsigned long longa= 412432424000ll;
    unsigned __int64b= 9223372036854775808ll;
    printf("%I64u\n",a);                 //使用%lld时无法正常输出,why? 解答在附
    printf("%I64u",b);
    system("pause");
    return 0;
}
附网友测试结果:
  刚实验了下,在VC6、DEV、CodeBlocks中C语言都可以使用__int64,格式化输出标识为%I64d。不过在VC6中数字后加2个L是会报错,可以只加1个或不加。查了下资料,__int64是windows专用的,被vc、gcc等编译器支持,但在在UNIX、Linux中需用long long配合%lld。后者是标准C的规定!
  我试了下long long配合%I64d,可以正确输出,而不管是long long还是__int64配合%lld都不能正确输出。所以我得出的结论是在windows下需要用longlong或,__int64配合%64d。而在UNIX、Linux中必须使用标准C规定的long long配合%lld。
记。




解答:

#include<stdio.h>
int main()
{
     int n;
     scanf("%d",&n);
     while(n--)
     {
 int b,c;
 long long a,s=1; 
         scanf("%lld%d%d",&a,&b,&c);
         while(b>0)
         {
              if(b%2==1)
        s=s*a%c;
       a=a*a%c;
       b/=2;
         }         
 printf("%lld\n",s);
     }  
     return 0;
}     








版权声明:本文为博主原创文章,未经博主允许不得转载。

nyoj-102-次方求模

次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值   输入第一行输入一个整数n表示测试数据的组数(n 每组测试只有一...
  • jtahstu
  • jtahstu
  • 2015年02月12日 19:54
  • 5439

poj 1150 The Last Non-zero Digit(阶乘取模运算的简单性质及递归技巧)

题目链接The Last Non-zero Digit题目分析参见http://www.cppblog.com/abilitytao/archive/2009/10/31/99907.html 题解...
  • Dylan_Frank
  • Dylan_Frank
  • 2017年04月04日 21:10
  • 347

除数为2的N次方取模可以用与运算替代,效率更高

取模运算在包括JAVA在内的大多数语言中的效率都十分低下,而当除数为2的N次方时,取模运算将退化为最简单的位运算,其效率明显提升(按照Bruce Eckel给出的数据,大约可以提升5~8倍) 。看看J...
  • zccracker
  • zccracker
  • 2017年01月12日 16:00
  • 402

求矩阵的n次方 快速幂

矩阵的快速幂是用来高效地计算矩阵的高次方的。将朴素的o(n)的时间复杂度,降到log(n)。 这里先对原理(主要运用了矩阵乘法的结合律)做下简单形象的介绍: 一般一个矩阵的n次方,...
  • puppylpg
  • puppylpg
  • 2015年04月19日 19:07
  • 2991

次方求模&同余定理

1 //a^b mod c=(a mod c)^b mod c很容易设计出一个基于二分的递归算法。 2 #include 3 #include 4 //快速幂算法,数论二分 5 long l...
  • pucca6
  • pucca6
  • 2013年03月30日 15:43
  • 1005

NYOJ 102 次方求模

快速幂取模算法的时间复杂度为O(logb),能在几乎所有的程序设计(竞赛)过程中通过,是目前最常用的算法之一,值得推广学习!!! 首先要了解这样一个公式:a^b mod c=(a mod c)^b ...
  • u014492609
  • u014492609
  • 2014年07月31日 21:12
  • 765

NYOJ 102 次方求模

次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 求a的b次方对c取余的值   输入 第一行输入一个整数n表示测试数据的组数(n 每组测试只有一行...
  • qq523176585
  • qq523176585
  • 2014年02月14日 11:28
  • 389

快速幂取模及其应用

快速幂取模 用法:用于求解 a 的 b 次方,而b是一个非常大的数,用O(n)的复杂度会超时。那么就需要这个算法,注意它不但可以对数求次幂,而且矩阵等都可以。 假如求 x ^ n 次方 我...
  • y990041769
  • y990041769
  • 2014年03月27日 19:34
  • 13499

第二发~次方求模~

次方求模 时间限制:1000 ms | 内存限制:65535 KB 难度:3描述 求a的b次方对c取余的值输入...
  • yuwenhao07
  • yuwenhao07
  • 2016年02月18日 16:29
  • 183

FFT多项式快速幂,对于x^num取模,顺便再模一个998244353

多项式快速幂 时间限制 : 60000 MS 空间限制 : 524288 KB问题描述:给一个n次多项式,求它的k次方。没关系,随手模一个998244353就行了。没关系,再随手模一个xm就行了...
  • INCINCIBLE
  • INCINCIBLE
  • 2017年02月05日 22:11
  • 632
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NYOJ-102-次方求模
举报原因:
原因补充:

(最多只允许输入30个字)