CSDN 素因子集合
来源:互联网 发布:fortran和c语言 编辑:程序博客网 时间:2024/05/07 18:22
题目详情:
http://student.csdn.net/mcs/programming_challenges?page=4小强最近在学初等数论,老师给他们出了一个课后习题,那就是给你两个正整数A,B(0<A,B<2^60),判断他们的素因子集合是否相同,小强刚接触数论,想了好一会还是没能想出来,你能帮助他吗?
输入描述:
输入包含多组测试数据,每组测试数据包含两个正整数A,B,以文件结束。
输出描述:
对于每组测试数据如果A和B的素因子集合相同则输出“YES”,否则输出“NO”。
输入样例:
2 8
4 9
10 50
输出样例:
YES
NO
YES
题目分析:
/**
*任意整数都可以表示成几个素数的幂次的乘积
*n=a1^p1+a2^p2A+...+ai^pi 其中ai为素数,pi为其指数
*可以利用此性质解题,求没每一个数的素因子集合,
*比较两个素因子集合是否相同.
*起初一直用^异或操作的下列性质a^0=a a^a=0
*一值wa,这是个陷阱,注意s=2^5^7=0;
*2=010 5=101 7=111
*因此此题可以用数组存下集合,进行逐个比较,也可以用乘积比较
*这里用乘积进行比较,有的读者可能会疑虑,乘积不会出错吗?请读者注意
*这里的因子全是素数,不会出现意外。
*/
AC代码:
/** *任意整数都可以表示成几个素数的幂次的乘积 *n=a1^p1+a2^p2A+...+ai^pi 其中ai为素数,pi为其指数 *可以利用此性质解题,求没每一个数的素因子集合, *比较两个素因子集合是否相同. *起初一直用^异或操作的下列性质a^0=a a^a=0 *一值wa,这是个陷阱,注意s=2^5^7=0; *2=010 5=101 7=111 *因此此题可以用数组存下集合,进行逐个比较,也可以用乘积比较 *这里用乘积进行比较,有的读者可能会疑虑,乘积不会出错吗?请读者注意 *这里的因子全是素数,不会出现意外。 */#include<iostream>#include<cstdio>#include<cmath>using namespace std;int main(){ long long a,b; while(scanf("%lld%lld",&a,&b)!=EOF){ if(a==1&&b==1){printf("NO\n"); continue;} long long s1=1,s2=1; for(long long i=2;i*i<=a;i++){ if(a%i==0){ s1=s1*i;//一个数只进行一次异或 //cout<<i<<endl; while(a%i==0){ a/=i; } } } if(a>1) s1=s1*a; for(long long i=2;i*i<=b;i++){ if(b%i==0){ s2=s2*i; //cout<<i<<endl; while(b%i==0){ b/=i; } } } if(b>1) s2=s2*b; if(s1==s2) printf("YES\n"); else printf("NO\n"); } return 0;}
0 0
- CSDN 素因子集合
- CSDN挑战赛 - 素因子集合
- CSDN编程竞赛——素因子集合
- 素因子集合
- 素因子集合
- 素因子集合
- 庞果网之素因子集合
- 关于java集合的加载因子?
- 数论模板(因子,素因子,约数)
- 分解素因子
- 1717求素因子
- CF109D分解素因子
- nyoj 最大素因子
- NYOJ - 最大素因子
- n! 素因子分解
- acm-最大素因子
- nyoj-最大素因子
- 分解素因子(数论)
- Java Swing设置主窗口位置居中方法
- Session与Cookie 的区别
- 算法导论之插入排序C++实现
- TextView
- Navigationの列表导航
- CSDN 素因子集合
- rep()函数的使用
- IOS 初级数据持久化-沙盒机制
- AMD笔试题准备
- c++多态
- Java输入输出流
- perl 文件操作
- Servlet 工作原理解析
- Java Swing 线程执行任务(不然界面一直处于不可点击状态)