上一次写C++不知道是什么时候了,贴一道水题,顺便讲讲这个set ……
Question:
问题描述
给定一个正整数n,求一个正整数p,满足p仅包含n的所有素因子,且每个素因子的次数不大于1
输入格式
一个整数,表示n
输出格式
输出一行,包含一个整数p。
样例输入
1000
样例输出
10
数据规模和约定
n<=10^12
样例解释:n=1000=2^3*5*3,p=2*5=10
Code:
#include<iostream>
#include<set>
#include<cmath>
#include<algorithm>
using namespace std;
bool IsPrime(int num)
{
for (long long i = 2; i <= sqrt(num); i++)
{
if (num%i == 0)
return false;
}
return true;
}
int main()
{
long long n;
long long p = 1;
cin >> n;
set<long long> prime;
for (long long i = 2; i <= n; i++)
{
if (n%i == 0 && IsPrime(i))
{
prime.insert(i);
n = n / i;
}
}
set<long long>::iterator it;
for (it = prime.begin(); it != prime.end(); it++)
{
p *= *it;
}
cout << p;
return 0;
}
C++ set归纳:
set的英文意思是“集合”, 集合都不陌生吧,集合的特点有唯一性,即:每一个元素只有一个,所以set可以用来“去重”操作,set还有默认的排序。
1、头文件——<set>
2、定义——set<int>Q;
3、输入(插入)——insert(x);
4、有序输出
set<int>::iterator it;
for(it = Q.begin(); it != Q.end(); it++)
cout<<*it<<endl;
5、删除制定元素——erase(x);
6、清空——clear();
7、判空——empty();
8、大小——size();
9、二分查找——Q.lower_bound(x);