C - Co-prime

Posted zjydeoneday

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C - Co-prime相关的知识,希望对你有一定的参考价值。

Given a number N, you are asked to count the number of integers between A and B inclusive which are relatively prime to N. 
Two integers are said to be co-prime or relatively prime if they have no common positive divisors other than 1 or, equivalently, if their greatest common divisor is 1. The number 1 is relatively prime to every integer.

·······

这道题分几步:

1、先把n用算术基本原理拆分成不同的质数,如果a~b中的数是这些质数的倍数那其肯定不与n互质,a~b的总个数减去不与n互质的数剩下来就是与n互质的数啦

2、先计算1~a-1中与n互质的个数,再计算1~b中与n互质的个数,相减。

#include<iostream>
using namespace std;
typedef long long ll;
ll a[10000];
int main()

    ll t;
    cin>>t;
    for(ll ii=1;ii<=t;ii++)
    
        ll x,y,n;
        cin>>x>>y>>n;
        ll num=1,sum=1,all=0,times;
        for(int i=2;i*i<=n;i++)   //向a数组里塞n的质因数
        
             if(n%i==0)   
            
                num++;
                a[num]=i;
            
            while(n%i==0)
            
                n=n/i;
            
          
        if(n>1)  a[++num]=n;
        for(int i=1;i<(1<<num);i++)
        
            times=0,sum=1;
            for(int j=0;j<num;j++)  //num个因数,乘了几个 
            
                if(1&(i>>j))      //判断有没有选中第j个因数 
                
                    sum*=a[j+1];
                    times++;
                
            
            if(sum==1||sum==0)
            continue; 
            if(times%2==1)
            
                all+=y/sum;
                all-=(x-1)/sum;
            
            else
                all-=y/sum;
                all+=(x-1)/sum;
            
        
        printf("Case #%lld: %lld\n",ii,y-x+1-all);
    
    return 0;
 

以上。

 

以上是关于C - Co-prime的主要内容,如果未能解决你的问题,请参考以下文章

C/C++ floor 函数

C语言数组问题?

关于c++/c

C语言 extern “C”

使用 MetroWerks C/C++ 开发的 C/C++ 资源

Lua与C/C++交互——C/C++调用Lua脚本