T-primes
2015-11-25 22:01
260 查看
Time Limit: 1sec Memory Limit:256MB
Description
We know that prime numbers are positive integers that have exactly two distinct positive divisors.
Similarly, we'll call a positive integer t Т-prime, if t has exactly three distinct positive divisors。
You are given an array of n positive integers. For each of them determine whether it is Т-prime or not.
Input
The first line contains a single positive integer, n (1 ≤ n ≤ 10000),showing how many numbers are in the array.
The next line contains n space-separated integers xi (1 ≤ xi ≤ 10^12).
Output
Print one line: The number of T-primes number
Sample Input
Copy sample input to clipboard
Sample Output
Hint
Please use long long instead of int for any Xi.
The given test has three numbers.
The first number 4 has exactly three divisors — 1, 2 and 4.
The second number 5 has two divisors (1 and 5),
The third number 6 has four divisors (1, 2, 3, 6),
hence the answer for them is 1 (only the number 4 is T-primes number).
N 的3个因数必然是: 1、√N 、N ,且 √N 要是整数。 这个题解条件不难解决,我们只需判断:pow([sqrt(N)],2)
是否等于 N就可以了。
然而问题又出现了,输入的数据有10^12之大,对输入的N进行循环判断必然会超时(Time
Limit Exceeded)。 因此我们不得不换个思路解决问题,我们要求满足条件的输入 N,对应的 √N 是整数。换句话说就是输入的数只能是自然数的平方形式( 即:4,9,16,25,36,49……),同时 √N
需要是素数(如4,9,25,49对应的2,3,5,7都是素数,而16,36对应的4,6不是素数),否则就会多于3个因数。(因为4*4=2*8 ,而7*7 != a*b )。
最后就是一个小坑,要记得排除1,1并不是T-prime数。(本宝宝就被坑了)
本宝宝的码
Description
We know that prime numbers are positive integers that have exactly two distinct positive divisors.
Similarly, we'll call a positive integer t Т-prime, if t has exactly three distinct positive divisors。
You are given an array of n positive integers. For each of them determine whether it is Т-prime or not.
Input
The first line contains a single positive integer, n (1 ≤ n ≤ 10000),showing how many numbers are in the array.
The next line contains n space-separated integers xi (1 ≤ xi ≤ 10^12).
Output
Print one line: The number of T-primes number
Sample Input
Copy sample input to clipboard
3 4 5 6
Sample Output
1
Hint
Please use long long instead of int for any Xi.
The given test has three numbers.
The first number 4 has exactly three divisors — 1, 2 and 4.
The second number 5 has two divisors (1 and 5),
The third number 6 has four divisors (1, 2, 3, 6),
hence the answer for them is 1 (only the number 4 is T-primes number).
Problem Source: OYoung
题解:此题的意思是判断输入的数字是否有且仅有3个因数(positive divisors),并记录满足条件的输入的个数。而我们不难发现,能满足条件的数字N 的3个因数必然是: 1、√N 、N ,且 √N 要是整数。 这个题解条件不难解决,我们只需判断:pow([sqrt(N)],2)
是否等于 N就可以了。
然而问题又出现了,输入的数据有10^12之大,对输入的N进行循环判断必然会超时(Time
Limit Exceeded)。 因此我们不得不换个思路解决问题,我们要求满足条件的输入 N,对应的 √N 是整数。换句话说就是输入的数只能是自然数的平方形式( 即:4,9,16,25,36,49……),同时 √N
需要是素数(如4,9,25,49对应的2,3,5,7都是素数,而16,36对应的4,6不是素数),否则就会多于3个因数。(因为4*4=2*8 ,而7*7 != a*b )。
最后就是一个小坑,要记得排除1,1并不是T-prime数。(本宝宝就被坑了)
本宝宝的码
06.
#include<iostream>
07.
#include<iomanip>
08.
#include<cmath>
09.
using
namespace
std;
10.
11.
int
main()
12.
{
13.
int
a[101],book[1001]={0};
14.
int
N;
15.
cin >>N;
16.
int
max=0;
17.
for
(
int
i=0;i<N;i++){
18.
cin >>a[i];
19.
book[a[i]]++;
20.
if
(book[a[i]]>max){
21.
max=book[a[i]];
22.
}
23.
}
24.
if
(N==1){
25.
cout <<
"YES"
<<endl;
26.
}
27.
else
{
28.
if
(N%2 != 0){
29.
if
(max <= N/2+1){
30.
cout <<
"YES"
<<endl;
31.
}
32.
else
{
33.
cout <<
"NO"
<<endl;
34.
}
35.
}
36.
else
{
37.
if
(max <= N/2){
38.
cout <<
"YES"
<<endl;
39.
}
40.
else
{
41.
cout <<
"NO"
<<endl;
42.
}
43.
}
44.
}
45.
return
0;
46.
}
相关文章推荐
- mybatis报错记录
- 下载CDT插件后重新打开Eclipse运行cocos2d-x游戏项目报错An internal error occurred during: "Android Library Update".
- java 堆和栈
- 图片上传直接显示
- iOS新闻客户端开发教程7-新闻列表
- Best Time to Buy and Sell Stock| LeetCode
- 一个app中保持程序全屏的方法。
- 头文件和源文件的区别
- CSDN-markdown基本语法说明
- JS中对样式的操作!
- 百度地图与 select下拉框的双向维护
- 2015世界机器人大会
- 数列排序
- 天声人語 20151125 法制局の「矜持」どこへ
- Unity3D-优化
- OC实现轮播图功能
- Testing Round A #12
- 二维数组名是指针的指针吗?
- 荣誉勋章 win7下无法正常运行解决方案
- Oracle-第一章 认识关系型数据库