数据结构 整理笔记(四)
for(i=2;i<=sqrt((long double)test);i++)
{
if(test%i ==0)
return false;
}
return true;
}
bool isSemiPrime(long test)
{
int i;
for(i=2;i<=sqrt((long double)test);i++)
{
if(test%i ==0)
{
int temp = test/i;
return isprime(i) && isprime(temp);
}
}
return false;
}
int main()
{
long n;
while(cin>>n && n !=0)
{
if(isSemiPrime(n))
cout<<"Yes"<
else
cout<<"No"<
}
}
12,淘汰赛问题
题目:
Our school is planning to hold a new exciting computer programming contest. During each round of the contest, the competitors will be paired, and compete head-to-head. The loser will be eliminated, and the winner will advance to next round. It proceeds until there is only one competitor left, who is the champion. In a certain round, if the number of the remaining competitors is not even, one of them will be chosed randomly to advance to next round automatically, and then the others will be paired and fight as usual. The contest committee want to know how many rounds is needed to produce to champion, then they could prepare enough problems for the contest.
Input
The input consists of several test cases. Each case consists of a single line containing a integer N - the number of the competitors in total. 1 <= N <= 2,147,483,647. An input with 0(zero) signals the end of the input, which should not be processed.
Output
For each test case, output the number of rounds needed in the contest, on a single line.
Sample Input
8
16
15
0
Sample Output
3
4
4
题目比较简单,下面是我给的解法。其实就是计算一个数是2的几次方。
#include
using namespace std;
long calculate(long test)
{
long ret = 0;
bool is2square = true;
while(test!=1)
{
if(test % 2)
is2square = false;
test /= 2;
ret++;
}
if(!is2square)
ret++;
return ret;
}
int main()
{
long n;
while(cin>>n && n !=0)
{
cout<
}
}