JS技术

实验D----两个数的互素判定 - ITSophia的专栏 - 博客频道 - CSDN.NET ITSophia的专栏

字号+ 作者:H5之家 来源:H5之家 2015-12-14 15:39 我要评论( )

横切关注点的两种实现方法软件系统,可看作由一组关注点组成。其中,直接的业务关注点,是直切关注点。而为直切关注点提供服务的,就是横切关注点。有两种方法

Problem description

称两个正整数是互素的,当它们没有大于1的公因子的时候。比如,4与9就是互素的,尽管4与9都不是素数,但4与9只有一个公因子:1,所以它们互素。但4与22就不是互素的,因为它们有一个大于1的公因子:2。
你的任务,给你2个数,判断它们是否互素。

Input

有多个测试序列,测试结束于测试文件结束;
每个测试序列占一行,每行2个用空格隔开的正整数a,b。a,b < 264.

Output

对于每对输入的整数,输出”YES”,如果它们互素;否则,输出”NO”。

Sample Input

22 4 4 9

Sample Output

NO YES 解题思路:试除法虽然可以判断两个数是否互素,但肯定会超时;所以在这里使用辗转相除法,即欧几里得算法。 欧几里得算法E如下: E=“对输入<x,y>,x和y是二进制表示的自然数: 1)重复下面的操作,指导y=0. 2)赋值x <- x mod y. 3)交换x和y的值。 4)输出x。” 简单来说是这样的: x,y,r1,r2,r3......rn,0 r1=x%y, r2=y%r1, 以此类推。看最后rn是否为1 因为 x = k*y+r1 , 即 r1 = x - k*y (a,b)表示a 和 b 的最大公因子 那么 (x,y)一定是r1的因子,(y,r1)一定是x的因子 所以(x,y)==(y,r1)==(r1,r2)==......==(rn,0)==rn 当且仅当最大公因子为1,即rn==1时,x,y互素;否则不然。 当然,算法思想很简单,但这道题很不容易通过。原因在于输入:每行2个用空格隔开的正整数a,b。a,b < 264 输入的数可以达到2^64,而:

int -2147483648 ~ +2147483647 (4 Bytes) unsigned int 0 ~ 4294967295 (4 Bytes) long == int long long -9223372036854775808 ~ +9223372036854775807 (8 Bytes) double 1.7 * 10^308 (8 Bytes)

unsigned int 0~4294967295

__int64的最大值:9223372036854775807
__int64的最小值:-9223372036854775808
unsigned __int64的最大值:18446744073709551615 所以,比较合适的类型是unsigned __int64(注意下划线之前有空格!) 输入格式为scanf("%I64d",&a); 注意是大写的I而不是小写的l 用cin>>a不知道为什么不行~~! 代码如下: #include<stdio.h> #include<stdlib.h> #include<iostream> using namespace std; int main() { unsigned __int64 a,b,r; //while(scanf("%l64d %l64d",&a,&b)!=EOF){ while(scanf("%I64u %I64u",&a,&b)!=EOF){//这个输入坑死爹啊!2^64意味着0啊,因为是64位的,但2^64表示64个0,第65位的那个1没有了! r=a%b; // printf("a,b,r:\n"); // printf("%I64d,%I64d,%I64d\n",a,b,r); while(r!=0) { a=b; b=r; r=a%b; } if(b==1) { printf("YES\n"); } else printf("NO\n"); } return 0; }

  • 上一篇实验B----CFG是P成员
  • 下一篇实验A---- ADFA的可判定性
  • 顶 0 踩 0

    猜你在找

    查看评论

    * 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

    个人资料


    ITSophia

  • 访问:177次
  • 积分:52
  • 等级:

    积分:52

  • 排名:千里之外
  • 文章搜索

    文章存档

  • 2015年01月(3)
  • 2014年12月(2)
  • 阅读排行

  • 实验B----CFG是P成员(44)
  • 实验A---- ADFA的可判定性(31)
  • 实验D----两个数的互素判定(27)
  • 算法学习10008(递归)(25)
  • 算法学习10146(计算阶乘的位数)(25)
  • 评论排行

  • 实验D----两个数的互素判定(1)
  • 算法学习10008(递归)(0)
  • 算法学习10146(计算阶乘的位数)(0)
  • 实验B----CFG是P成员(0)
  • 实验A---- ADFA的可判定性(0)
  • 推荐文章

  • *Hadoop节点"慢磁盘"监控
  • *假如你想成为全栈工程师…
  • *没有躲过的坑--正则表达式截取字符串
  • *CardView完全解析与RecyclerView结合使用(三十二)
  • *And roid 高仿微信发朋友圈浏览图片效果
  • *通过Ajax的方式执行GP服务
  • 最新评论

  • cc_smile0702: 好坑的题

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • Arduino 温湿度传感器DHT11模块实验 - 比特字节-只为技术 - 博客频道 - CSDN.NET 比特字节-只

      Arduino 温湿度传感器DHT11模块实验 - 比特字节-只为技术 - 博客频道

      2015-12-15 08:54

    • 数据结构实验3(飞机最少环城次数问题) - GKHacks Blog - 博客频道 - CSDN.NET GKHacks

      数据结构实验3(飞机最少环城次数问题) - GKHacks Blog - 博客频道 -

      2015-12-14 16:18

    • 数据结构实验2(二叉链表实现二叉树的基本运算) - GKHacks Blog - 博客频道 - CSDN.NET GKH

      数据结构实验2(二叉链表实现二叉树的基本运算) - GKHacks Blog - 博

      2015-12-14 16:13

    • 数据结构实验3(图的DFS和BFS实现) - GKHacks Blog - 博客频道 - CSDN.NET GKHack

      数据结构实验3(图的DFS和BFS实现) - GKHacks Blog - 博客频道 - CSDN

      2015-12-14 16:06

    网友点评
    l