博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1787 GCD Again
阅读量:4972 次
发布时间:2019-06-12

本文共 2133 字,大约阅读时间需要 7 分钟。

GCD Again

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1391    Accepted Submission(s): 518
Problem Description
Do you have spent some time to think and try to solve those unsolved problem after one ACM contest?
No? Oh, you must do this when you want to become a "Big Cattle".
Now you will find that this problem is so familiar:
The greatest common divisor GCD (a, b) of two positive integers a and b, sometimes written (a, b), is the largest divisor common to a and b. For example, (1, 2) =1, (12, 18) =6. (a, b) can be easily found by the Euclidean algorithm. Now I am considering a little more difficult problem:
Given an integer N, please count the number of the integers M (0<M<N) which satisfies (N,M)>1.
This is a simple version of problem “GCD” which you have done in a contest recently,so I name this problem “GCD Again”.If you cannot solve it still,please take a good think about your method of study.
Good Luck!
 
 
Input
Input contains multiple test cases. Each test case contains an integers N (1<N<100000000). A test case containing 0 terminates the input and this test case is not to be processed.
 
 
Output
For each integers N you should output the number of integers M in one line, and with one line of output for each line in input.
 
 
Sample Input
2 4 0
 
 
Sample Output
0 1
 
 
Author
lcy
 
 
Source
 
 
Recommend
lcy
 
//欧拉函数 #include 
#include
#include
#include
#include
#include
using namespace std;int hash[10003];int rc[1300];void del(){ int i,j,k=1; for(i=4;i<10000;i+=2) hash[i]=1; rc[0]=2; for(i=3;i<10000;i+=2) if(!hash[i]) { rc[k++]=i; for(j=i+i;j<10000;j+=i) hash[j]=1; } // printf("%d",k);}int ss(int n){ int i=0; double fc=n; bool b; for(i=0;i<1229;i++) { b=0; while(n%rc[i]==0) { b=1; n=n/rc[i]; } if(b) fc*=(1.0-1.0/rc[i]); } if(n>1) fc*=(1.0-1.0/n); return int(fc+0.5);}int main(){ del(); // printf("%d ",10000007%941); int n; while(scanf("%d",&n),n) { printf("%d\n",n-ss(n)-1); } return 0;}

转载于:https://www.cnblogs.com/372465774y/archive/2012/07/26/2609362.html

你可能感兴趣的文章
MongoDB的简单使用
查看>>
prometheus配置
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
python 多进程和多线程的区别
查看>>
sigar
查看>>
iOS7自定义statusbar和navigationbar的若干问题
查看>>
[Locked] Wiggle Sort
查看>>
deque
查看>>
c#中从string数组转换到int数组
查看>>
数据模型(LP32 ILP32 LP64 LLP64 ILP64 )
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
iOS 加载图片选择imageNamed 方法还是 imageWithContentsOfFile?
查看>>
toad for oracle中文显示乱码
查看>>
SQL中Group By的使用
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
hiho_offer收割18_题解报告_差第四题
查看>>
AngularJs表单验证
查看>>
静态方法是否属于线程安全
查看>>
02号团队-团队任务3:每日立会(2018-12-05)
查看>>