acm专题四

一、第一题
代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	long long mod=19260817,na=0,nb=0,res=1,k=mod-2;
	string a,b;
	cin>>a>>b;
	for(long long i=0;i<a.length();i++) na=(na*10+a[i]-'0')%mod;
	for(long long i=0;i<b.length();i++) nb=(nb*10+b[i]-'0')%mod;
	while(k)
	{
		if(k%2!=0) res=res*nb%mod;
		nb=nb*nb%mod;k/=2;
	}
	cout<<na*res%mod;
	return 0;
}

思路:用字符存,再取模转换为数字,然后求逆元

二、第二题
代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t,i,l,r;
	cin>>t;
	for(i=0;i<t;i++)
	{
		cin>>l>>r;
		if(l==1&&r==1) cout<<1<<endl;
		else cout<<r-l<<endl;
	}
	return 0;
}

思路:差值为1,一定互质

三、第三题
代码:

#include <bits/stdc++.h>
using namespace std; 
int countPrimesInRange(long long L, long long R) {
    int limit = sqrt(R);
    vector<bool> isPrime(limit + 1, true);
    vector<int> primes;
    for (int i = 2; i <= limit; ++i) {
        if (isPrime[i]) {
            primes.push_back(i);
            for (int j = i * i; j <= limit; j += i) {
                isPrime[j] = false;
            }
        }
    }
    vector<bool> isComposite(R - L + 1, false);
    for (int prime : primes) {
        long long start = max((L + prime - 1) / prime * prime, (long long)prime * prime);
        for (long long j = start; j <= R; j += prime) {
            isComposite[j - L] = true;
        }
    }
    int count = 0;
    for (int i = 0; i <= R - L; ++i) {
        if (!isComposite[i] && L + i > 1) {
            ++count;
        }
    }
    return count;
}
int main() {
    long long L, R;
    cin >> L >> R;
    cout << countPrimesInRange(L, R) << endl;
    return 0;
}

思路:埃式筛素数

四、第四题
代码:

#include <bits/stdc++.h>
using namespace std;
int gcd(int a,int b){
	return b?gcd(b,a%b):a;
} 
int main() 
{
    int x,y;
    cin>>x>>y;
    if(y%x!=0) cout<<0;
    else
    {
    	int p=y/x,ans=0,i;
    	for(i=1;i*i<=p;i++)
    	{
    		if(p%i==0)
    		{
    			int k1=i,k2=p/i;
    			if(gcd(k1,k2)==1)
    			{
    				ans++;
    				if(k1!=k2) ans++;
				}
			}
		}
		cout<<ans;
	}
    return 0;
}

思路:gcd(p,q)=x,lcm(p,q)-y,p=k1x,q=k2x,k1*k2=y/x,p=y/x,gcd(k1,k2)=1

总结:好难好难好难,我要受不了了

posted @ 2025-02-10 21:39  astronomyy  阅读(8)  评论(0)    收藏  举报