ACdream 神奇的%系列一 (素数筛)
2014-08-28 15:11
239 查看
题目链接:http://acdream.info/problem?pid=1071
Time Limit: 6000/3000MS (Java/Others)Memory Limit: 65536/32768KB (Java/Others)
SubmitStatisticNext
Problem
在计算机的世界里,%不是百分比,而是除法取余哟!
比如:
4 % 2 = 0
5 % 3 = 2
给你 2 ≤ N ≤ 100000 个数,a[1],a[2]...a[i]...a
(1 ≤ a[i] ≤ 100000)。
问有几个组合 (a[i], a[j]),(i != j, a[i]
> a[j]),使得 a[i] % a[j] != 0。
输入有多组数据。(<= 30)
对于每组数据:
第一行:N(表示 N 个数)
第二行:N 个元素 a[i]
输出有几个组合 (a[i],a[j]),使得 a[i] % a[j] != 0
思路:类似于素数筛,求出所有合数的组合。用b数组保存每个数字出现的次数;
#include <stdio.h>
#include <string.h>
int main()
{
int a[100001];
int n;
long long ans;
while(scanf("%d",&n)!=EOF)
{
ans = 0;
int i,j;
memset(a,0,sizeof(a));
int maxn = 0;
for(i=0;i<n;i++)
{
int num;
scanf("%d",&num);
a[num]++;
if(num>maxn)
maxn = num;
}
for(i=1;i<=maxn;i++)
{
if(a[i])
{
ans+=(a[i]*(a[i]-1))/2; //如果相同的数字有多个,则算出自己与自己的组合数
for(j=2;i*j<=maxn;j++)
{
if(a[i*j])
{
ans+=(a[i]*a[i*j]);//计算出合数之间的组合数
}
}
}
}
printf("%lld\n",(long long) n*(n-1)/2-ans);//总组合数减去合数组合数
}
return 0;
}
神奇的%系列一
Time Limit: 6000/3000MS (Java/Others)Memory Limit: 65536/32768KB (Java/Others)SubmitStatisticNext
Problem
Problem Description
在计算机的世界里,%不是百分比,而是除法取余哟!比如:
4 % 2 = 0
5 % 3 = 2
给你 2 ≤ N ≤ 100000 个数,a[1],a[2]...a[i]...a
(1 ≤ a[i] ≤ 100000)。
问有几个组合 (a[i], a[j]),(i != j, a[i]
> a[j]),使得 a[i] % a[j] != 0。
Input
输入有多组数据。(<= 30)对于每组数据:
第一行:N(表示 N 个数)
第二行:N 个元素 a[i]
Output
输出有几个组合 (a[i],a[j]),使得 a[i] % a[j] != 0
Sample Input
3 1 1 1 4 1 2 3 4 5 1 2 2 4 6
Sample Output
0 2 1
思路:类似于素数筛,求出所有合数的组合。用b数组保存每个数字出现的次数;
#include <stdio.h>
#include <string.h>
int main()
{
int a[100001];
int n;
long long ans;
while(scanf("%d",&n)!=EOF)
{
ans = 0;
int i,j;
memset(a,0,sizeof(a));
int maxn = 0;
for(i=0;i<n;i++)
{
int num;
scanf("%d",&num);
a[num]++;
if(num>maxn)
maxn = num;
}
for(i=1;i<=maxn;i++)
{
if(a[i])
{
ans+=(a[i]*(a[i]-1))/2; //如果相同的数字有多个,则算出自己与自己的组合数
for(j=2;i*j<=maxn;j++)
{
if(a[i*j])
{
ans+=(a[i]*a[i*j]);//计算出合数之间的组合数
}
}
}
}
printf("%lld\n",(long long) n*(n-1)/2-ans);//总组合数减去合数组合数
}
return 0;
}
相关文章推荐
- acdream 1070 神奇的%系列二 (离线操作)
- ACdream 1070 神奇的%系列二 (数学+二分)
- acdream 1071 神奇的%系列一 (树状数组维护,离散化)
- 【ACdream】1070 神奇的%系列二
- ACDream 1071 神奇的%系列一
- ACdream 1070 神奇的%系列二(YM)
- ACdream 1071 神奇的%系列一
- ACdream区域赛指导赛之手速赛系列(4) E Tic-Tac-Toe-Tomek
- ACdream区域赛指导赛之专题赛系列(1)の数学专场
- 一个关于素数的神奇性质
- [LeetCode] Count Primes - 素数系列问题
- 素数筛法系列之4 预先删除小素数
- 漫谈程序员系列:神奇的四步编程法
- G - 最小公倍数 ACdream - 1732 【快速素数打表----呜呜】
- ACDREAM 02G 小晴天老师系列——可恶的墨水瓶(暴力专场)
- ACdream区域赛指导赛之手速赛系列(2)
- 上帝的杰作系列之:神奇的数
- ACdream区域赛指导赛之手速赛系列(6)
- 神奇的素数_验证素数(程序员的数学思维修炼)
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)