AtCoder Beginner Contest 170 D - Not Divisible (数学)
2024-10-19 03:44:09
题意:有一长度为\(n\)的数组,求该数组中有多少元素不能整除其它任一元素的个数.
题解:刚开始写了个分解质因数(我是傻逼),后来发现直接暴力枚举因子即可,注意某个元素出现多次时肯定不满足情况,再特判数组中存在\(1\)的情况即可.
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>
#include <map>
#include <set>
#include <unordered_set>
#include <unordered_map>
#define ll long long
#define fi first
#define se second
#define pb push_back
#define me memset
const int N = 1e6 + 10;
const int mod = 1e9 + 7;
const int INF = 0x3f3f3f3f;
using namespace std;
typedef pair<int,int> PII;
typedef pair<ll,ll> PLL; int n;
int a[N];
map<int,int> mp; bool divide(int x){
int tmp=x;
for(int i=2;i<=x/i;++i){
if(x%i==0){
int t=1;
while(x%i==0){
t*=i;
if(mp[t] && t!=tmp) return false;
x/=i;
if(mp[x] && x!=tmp) return false;
}
x=tmp;
}
}
return true;
} int main() {
ios::sync_with_stdio(false);cin.tie(0);
cin>>n;
for(int i=1;i<=n;++i){
cin>>a[i];
mp[a[i]]++;
}
int cnt=0;
if(mp[1]==1){
cout<<1<<endl;
return 0;
}
if(mp[1]>1){
cout<<0<<endl;
return 0;
}
for(int i=1;i<=n;++i){
if(divide(a[i]) && mp[a[i]]==1) cnt++;
}
cout<<cnt<<endl; return 0;
}
最新文章
- Asp.net中导出Excel文档(Gridview)
- Unity-WIKI 之 AnimationToPNG
- C与C++存储空间布局
- IPv6 sokcet 编程
- CAF(C++ actor framework)使用随笔(send sync_send)(二)
- Oracle 经常使用的改动语句
- PMD教程
- c++ 指针总结 函数参数指针调用和堆栈内存的分配原理
- git的个人配置
- 思科模拟器GNS3-2.1.8安装笔记 (适用于版本2.0.3以上的GNS3)
- github分支规范
- 【css】怎么让Chrome支持小于12px 的文字
- mysql安装绑定my.ini
- 【分享】Asp.net Core相关教程及开源项目
- uva-10041-水题
- 深入解析内存原理:RAM的基本原理
- 安装oracle11g时遇到INS-13001环境不满足最低要求
- 【11.8校内测试】【倒计时2天】【状压DP】【随机化?/暴力小模拟】
- Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password
- js window.open隐藏参数提交