【CSU 1756】Prime
2024-08-30 21:12:13
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1756
直接暴力O(n^2logn)过不了 两两算gcd
考虑每个数的范围[1,1000]统计一下即可O(1000^2*log(1000))
Notice:1与任何数互质,需要特判(自己与自己互质)
Code1 统计
// <1756.cpp> - Wed Oct 19 08:25:53 2016
// This file is made by YJinpeng,created by XuYike's black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don't know what this program is. #include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN=;
inline int gi() {
register int w=,q=;register char ch=getchar();
while((ch<''||ch>'')&&ch!='-')ch=getchar();
if(ch=='-')q=,ch=getchar();
while(ch>=''&&ch<='')w=w*+ch-'',ch=getchar();
return q?-w:w;
}
int a[MAXN];
int main()
{
int T=gi();
while(T--){
int n=gi(),ans=;
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
a[gi()]++;
for(int i=;i<MAXN;i++)
if(a[i])
for(int j=i+;j<MAXN;j++)
if(__gcd(i,j)==)ans+=a[i]*a[j];
ans+=a[]>?(a[]-)*a[]/:;//this
printf("%d\n",ans);
}
return ;
}
Code2 vector 本以为记录一下哪些数出现过(结果发现数据水,还跑得慢一点)
// <1756.cpp> - Wed Oct 19 08:25:53 2016
// This file is made by YJinpeng,created by XuYike's black technology automatically.
// Copyright (C) 2016 ChangJun High School, Inc.
// I don't know what this program is. #include <iostream>
#include <cstdio>
#include <vector>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
const int MAXN=;
inline int gi() {
register int w=,q=;register char ch=getchar();
while((ch<''||ch>'')&&ch!='-')ch=getchar();
if(ch=='-')q=,ch=getchar();
while(ch>=''&&ch<='')w=w*+ch-'',ch=getchar();
return q?-w:w;
}
int a[MAXN];vector<int>b;
inline int gcd(register int a,register int b){
return b==?a:gcd(b,a%b);
}
int main()
{
freopen("1756.in","r",stdin);
freopen("1756.out","w",stdout);
int T=gi();
while(T--){
int n=gi(),ans=,to;
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
a[gi()]++;b.clear();
for(int i=;i<MAXN;i++)
if(a[i])b.push_back(i);to=b.size();
for(int i,o=;i=b[o],o<to;o++)
if(a[i])
for(int j,k=o+;j=b[k],k<to;k++)
if(gcd(i,j)==)ans+=a[i]*a[j];
if(b[]==)ans+=a[]>?(a[]-)*a[]/:;//this
printf("%d\n",ans);
}
return ;
}
最新文章
- 关于有默认值的字段在用EF做插入操作时的思考
- Java ClassLoader基础及加载不同依赖 Jar 中的公共类
- 【转】JVM 堆内存设置原理
- Spring框架学习之第6节
- jquery获取div距离顶部的距离
- SQL从入门到基础–03 SQLServer基础1(主键选择、数据插入、数据更新)
- HAOI 硬币购物
- Spring mvc系列一之 Spring mvc简单配置
- Guice之IOC教程
- MySql 触发器的新增、修改、删除的创建
- Add AI feature to Xamarin.Forms app
- requests之headers &#39;Content-Type&#39;: &#39;text/html&#39;误判encoding为&#39;ISO-8859-1&#39;导致中文text解码错误
- 关于事务回滚,rollback tran到底要不要写?
- QT---事件系统
- 利用jenkins+git自动执行接口测试代码
- Spring学习之SpringMVC框架快速搭建实现用户登录功能
- 主键(primary key)和唯一索引(unique index)区别
- step-by-step-creating-a-sql-server-2012-alwayson-availability-group/
- AngularJS------报错";The selector ";app-user-item"; did not match any elements";
- alibaba/Sentinel 分布式 系统流量防卫兵