找新朋友c++题目

来源:百度知道 编辑:UC知道 时间:2024/06/04 20:03:23
新年快到了,“猪头帮协会”准备搞一个聚会,已经知道现有会员N人,把会员从1到N编号,其中会长的号码是N号,凡是和会长是老朋友的,那么该会员的号码肯定和N有大于1的公约数,否则都是新朋友,现在会长想知道究竟有几个新朋友?请你编程序帮会长计算出来。

输入:第一行是测试数据的组数CN(Case number,1<cn<10000),接着有CN行正整数N(1<n<32768),表示会员人数。

输出:对于每一个N,输出一行新朋友的人数,这样共有CN行输出。

Sample input:

2

25608

24027

Sample output:

7680

16016

本人写的....

#include"stdio.h"
#include"math.h"
int main(){
int CN;
while(1==scanf("%d",&CN))
{
for (int i=0;i<CN;i++){
int N;
int num=0;
scanf("%d",&N);
int num1;
for (int j=2;j<=N;j++){
for (int x=2;x<=j;x++){
num1=0;
if(j%x==0&&N%x==0){
num1=1;
goto mdq;
}
else ;
}
mdq: num=num+num1;
}
printf ("%d\n",num);
}
}
return 0;

#include<stdio.h>
int common[10];
int num1;
int num2;
/*初始化*/
void init()
{
int i;
for(i=0;i<10;i++)
common[i]=0;
num2=0;
}
/*求公约数函数*/
void get_common(int n)
{
int i=0;
int j=0;
int x=2;
for(;x<=n;x++)
{
while(n%x==0)
{
common[i]=x;
if(j==0)//这是while循环的第一个
i++;
n=n/x;
j=1;
}
j=0;
}
num1=i-1;
}
/*判断新旧朋友*/
void judge(int x)
{
int i;
for(i=0;i<=num1;i++)
{
if(x%common[i]==0)
{
num2++;
return;
}
}
}
void main()
{
int i,j;
int x,y;
printf("输入总数\n");
scanf("%d",&y);
for(j=1;j<=y;j++)
{
printf("输入测试数:\n");
scanf("%d",&x);
init();
get_common(x);
for(i=2;i<=x;i++)
judg