庞果网之素因子集合

简介:

【题目】

题目详情

小强最近在学初等数论,老师给他们出了一个课后习题,那就是给你两个正整数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;
}


目录
相关文章
|
3月前
|
算法
7-6 连续因子
7-6 连续因子
16 0
|
5月前
|
存储 容器
List,linkeedlist集合介绍,特点,二者区别,增长因子,去重复
List,linkeedlist集合介绍,特点,二者区别,增长因子,去重复
|
4月前
|
算法 测试技术 C#
C++单调向量算法:得到山形数组的最少删除次数
C++单调向量算法:得到山形数组的最少删除次数
|
8月前
|
C++
计算一个数组的子集
给你一个整数数组 nums ,数组中的元素 互不相同 。返回该数组所有可能的子集(幂集)。
36 0
ML之Hash_EditDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用编辑距离算法进行判别
ML之Hash_EditDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用编辑距离算法进行判别
ML之Hash_EditDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用编辑距离算法进行判别
|
算法 计算机视觉
ML之Hash_HamMingDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用汉明距离算法进行判别
ML之Hash_HamMingDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用汉明距离算法进行判别
ML之Hash_HamMingDistance:基于输入图片哈希化(均值哈希+差值哈希)即8*8个元素的单向vector利用汉明距离算法进行判别
(转载) 数组a[]={3,5,2,4,1,8},要求从a中找出所有“和”等于10的子集
背包问题。     不过就这道题目本身而言,由于集合a中只要6个元素,而不是成千上万,所以可以使用更直观的办法:     只要你能通过程序给出数组a中元素所组成的集合的所有的子集合(幂集),那么只需在这些集合中搜索等于10的就可以了。
623 0
|
存储
数组应用(C): 数据求均值
数组定义; 循环;
110 0