83分求助
查看原帖
83分求助
848465
ganxingyu楼主2022/12/9 11:16

那位大佬能指出错误 代码:

#include<iostream>
#include<math.h>
#include<set>
using namespace std;
const int N=2e7;
bool b[N],c[N];
long long s[N],a[N];
int t;
void f(int n)
{
	for(int i=2;i<=sqrt(n);i++)
	{
		if(!b[i]) s[t++]=i;
		for(int j=0;s[j]<=n/i;j++)
		{
			b[s[j]*i]=true;
			if(i%s[j]==0) break;
		}
	}
}
const int M=2147483648;
#define int long long//最大值为4807526976>5.12479e+008=22637*22639
signed main()
{
    f(N);
	set<int>l;
	int n;
	cin>>n;
	a[1]=1;
	a[2]=1;
	for(int i=3;i<=n;i++) a[i]=a[i-1]+a[i-2];
	long long c=a[n]%M;
	for(int i=0;i<t;i++)
	{
		l.insert(s[i]);
	}
	long long e=0;
	cout<<c<<"=";
	if(l.find(c)!=l.end())
	{
		cout<<c;
		return 0;
	}
	long long i=0;
	while(c!=1&&i<=t) 
	{
		if(c%s[i]==0) 
		{
            if(e==0) cout<<s[i];
			else cout<<"*"<<s[i];
			c/=s[i];
			e++;
        }
		else i++;
	}
	return 0;
}/*35*/
2022/12/9 11:16
加载中...