庞果网之素因子集合

【题目】

题目详情

小强最近在学初等数论,老师给他们出了一个课后习题,那就是给你两个正整数A,B(0<A,B<2^60),判断他们的素因子集合是否相同,小强刚接触数论,想了好一会还是没能想出来,你能帮助他吗?

输入描述:

输入包含多组测试数据,每组测试数据包含两个正整数A,B,以文件结束。

输出描述:

对于每组测试数据如果A和B的素因子集合相同则输出“YES”,否则输出“NO”。

答题说明

输入样例:

2 8

4 9

10 50

输出样例:

YES

NO

YES

【分析】

唯一质因子分解定理:任意一个合数a仅能以一种方式,写成如下的乘积形式:
a = p1^e1*p2^e2*...*pr^er
    其中pi为素数,p1<p2<...<pr,且ei为正整数。例如数6000=2^4*3*5^3。

【代码】

/*********************************
*   日期:2014-04-29
*   作者:SJF0115
*   题目: 素因子集合
*   来源:http://hero.csdn.net/Question/Details?ID=506&ExamID=501&from=211
*   结果:AC
*   来源:庞果网
*   总结:
**********************************/
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

#define N 1000000
long long set[N],set2[N];

//素因子集合
int PrimeSet(long long n,long long *set){
    int num = 0;
    for(long long i = 2;i*i <= n;i++){
        if(n % i == 0){
            set[num++] = i;
            while(n % i ==0){
                n = n / i;
            }
        }//if
    }//for
    if(n > 1){
        set[num++] = n;
    }
    //返回素数集合的个数
    return num;
}

int main(){
    int i;
    long long a,b;
    while(scanf("%lld%lld",&a,&b) != EOF){
        memset(set,0,sizeof(set));
        memset(set2,0,sizeof(set2));
        int num = PrimeSet(a,set);
        int num2 = PrimeSet(b,set2);
        if(num != num2){
            printf("NO\n");
        }
        else{
            for(i = 0;i < num;i++){
                if(set[i] != set2[i]){
                    printf("NO\n");
                    break;
                }
            }//for
            if(i >= num){
                printf("YES\n");
            }//if
        }//if
    }//while
    return 0;
}
时间: 2024-09-27 18:45:50

庞果网之素因子集合的相关文章

庞果网之高斯公式

[题目] 题目详情 高斯在上小学时发明了等差数列求和公式:1+2+..+100=5050.现在问题在于给你一个正整数n,问你他可以表示为多少种连续正整数之和?(自身也算). 输入格式: 多组数据,每组数据一行,一个正整数n. 0<n<2000000000 输出格式: 每组数据一行,包含一个正整数,表示结果. 答题说明 输入样例 5 120 输出样例: 2 4 解释: 5=2+3=5 120=1+2+...+15=22+23+24+25+26=39+40+41=120 [分析] 具体详见:点击打

庞果网之建立信号基站

题目详情 要建立一个信号基站服务n个村庄,这n个村庄用平面上的n个点表示.假设基站建立的位置在(X,Y),则它对某个村庄(x,y)的距离为max{|X – x|, |Y – y|}, 其中| |表示绝对值,我们的目标是让所有村庄到信号基站的距离和最小. 基站可以建立在任何实数坐标位置上,也可以与某村庄重合. 输入: 给定每个村庄的位置x[],y[],x,y都是整数,满足:            -1000000000 < x,y < 1000000000 村庄个数大于1,小于101. 输出:

庞果网之寻找直方图中面积最大的矩形

题目详情 给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形.    如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]:    那么上述直方图中,面积最大的矩形便是下图所示的阴影部分的面积,面积= 10单位.    请完成函数largestRectangleArea,实现寻找直方图中面积最大的矩形的功能,如当给定直方图各小块的高度= [2,1,5,6,2,3] ,返回10. [解析] 使用一个栈

庞果网之字符串消除

题目详情 给定一个字符串,仅由a,b,c 3种小写字母组成.当出现连续两个不同的字母时,你可以用另外一个字母替换它,如 有ab或ba连续出现,你把它们替换为字母c: 有ac或ca连续出现时,你可以把它们替换为字母b: 有bc或cb 连续出现时,你可以把它们替换为字母a. 你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串尽可能短,求最终结果的最短长度. 输入:字符串.长度不超过200,仅由abc三种小写字母组成. 输出: 按照上述规则不断消除替换,所得到的字符串最短的长度.

庞果网之字符串的完美度

题目详情 我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同, 而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的. 现在给定一个字符串,输出它的最大可能的完美度. 例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77. /********************************* * 日期:2013-11-03 * 作者:SJF0115 * 题号: 题目 字符串

庞果网之杨辉三角的变形

题目详情          1      1   1  1   1  2   3  2  1 1  3  6   7  6  3  1 以上三角形的数阵,第一行只有一个数1, 以下每行的每个数,是恰好是它上面的数,左上的数和右上数等3个数之和(如果不存在某个数,认为该数就是0). 求第n行第一个偶数出现的位置.如果没有偶数,则输出-1.例如输入3,则输出2,输入4则输出3. 输入n(n <= 1000000000) [解析] 经过分析得出的结论如下: 1.前两行没有偶数可直接返回-1 2.一下每

庞果网之数组排序

题目详情 本题来自caopengcs,只要你有兴趣,每个人都可以出题(出题入口在主页右侧边栏"贡献题目"->"我要发布"内),以下是题目详情: 给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序.求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100. 例如: 原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1. 原数组是2,3,1,我们需要交换2和1,变成1,3,2,再交换3和2,变为1,2,3

程序代码-庞果的字符串完美度的问题,用C++编的

问题描述 庞果的字符串完美度的问题,用C++编的 题目: 我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同, 而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的. 现在给定一个字符串,输出它的最大可能的完美度. 例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77. 疑问: 程序里面我注意到存在其它字符还有大小写的问题,可提交后测试用例还是不对,不知道是哪里错了,还请帮

育果网马于堃:弃医创业做高端医疗客户互交平台

i黑马:马于堃,出身于医学世家,曾经在天坛医院做医生十年,2013年弃医创业,现为高端医疗客户互交平台育果网创始人.其实,放弃做医生,对于马于堃而言并不容易.她谈及当时的经历,那时我的执业医院是知名的三甲医院,科室也很好,父母都在医疗岗位,他们反对我离职创业.我有两年的时间是在兼职干,后来父母发现我的生存能力已经大大超出了他们的预估,也承认我做的这份事业可以改变很多人,所以才同意我全身心地创业.还好,我先生倒是支持我,只要不因为太投入创业耽误到家里就可以了."她在慈善晚宴上的开场白,也道出了创业